Compare commits
No commits in common. "master" and "main" have entirely different histories.
@ -1,2 +0,0 @@
|
|||||||
VITE_APP_CONFIG="{"appName":"dy","accountList":[16888888887,16888888888,16888888889]}"
|
|
||||||
VITE_APP_NAME=dy
|
|
||||||
@ -1,2 +0,0 @@
|
|||||||
VITE_APP_CONFIG="{"appName":"dy","accountList":[16888888887,16888888888,16888888889]}"
|
|
||||||
VITE_APP_NAME=dy
|
|
||||||
28
.gitignore
vendored
@ -1,28 +0,0 @@
|
|||||||
# Logs
|
|
||||||
logs
|
|
||||||
*.log
|
|
||||||
npm-debug.log*
|
|
||||||
yarn-debug.log*
|
|
||||||
yarn-error.log*
|
|
||||||
pnpm-debug.log*
|
|
||||||
lerna-debug.log*
|
|
||||||
|
|
||||||
node_modules
|
|
||||||
dist
|
|
||||||
dist-ssr
|
|
||||||
*.local
|
|
||||||
st-web
|
|
||||||
wx-web
|
|
||||||
st-manage
|
|
||||||
.zip
|
|
||||||
|
|
||||||
# Editor directories and files
|
|
||||||
.vscode/*
|
|
||||||
!.vscode/extensions.json
|
|
||||||
.idea
|
|
||||||
.DS_Store
|
|
||||||
*.suo
|
|
||||||
*.ntvs*
|
|
||||||
*.njsproj
|
|
||||||
*.sln
|
|
||||||
*.sw?
|
|
||||||
3
.vscode/extensions.json
vendored
@ -1,3 +0,0 @@
|
|||||||
{
|
|
||||||
"recommendations": ["Vue.volar", "Vue.vscode-typescript-vue-plugin"]
|
|
||||||
}
|
|
||||||
82
README.md
@ -1,81 +1,3 @@
|
|||||||
# 截图生成模板(Vue 3 + TypeScript + Vite)
|
# go-dy
|
||||||
|
|
||||||
一个基于 Vue 3 的前端项目,用于生成截图模板,支持登录、注册、验证码、图片上传与效果预览等功能。项目集成了 Pinia、Vue Router、Element Plus、TailwindCSS 等,开发体验友好、构建快速。
|
dy模板工具
|
||||||
|
|
||||||
## 技术栈
|
|
||||||
- Vue 3、TypeScript、Vite
|
|
||||||
- Pinia、Vue Router
|
|
||||||
- Element Plus、TailwindCSS
|
|
||||||
- Axios
|
|
||||||
|
|
||||||
## 快速开始
|
|
||||||
1. 安装依赖
|
|
||||||
- `npm install`
|
|
||||||
2. 选择并启动应用(需要传入 appname)
|
|
||||||
- 开发:`npm run dev -- dy`
|
|
||||||
- 构建:`npm run build -- dy`
|
|
||||||
- 预览:`npm run preview`
|
|
||||||
|
|
||||||
> 说明:`dy` 是示例 appname,必须与 `config/index.json` 中的键一致。开发时写入 `.env.development` 并启动 Vite(默认端口 `3001`),构建时写入 `.env.production` 并输出到 `html/`。
|
|
||||||
|
|
||||||
## 环境与配置
|
|
||||||
- `config/index.json` 管理多应用配置,示例:
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"dy": {
|
|
||||||
"appName": "dy",
|
|
||||||
"accountList": [16888888887, 16888888888, 16888888889]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
- 启动/构建脚本会将所选应用写入 `.env.*`:
|
|
||||||
- `VITE_APP_NAME`
|
|
||||||
- `VITE_APP_CONFIG`(JSON 字符串)
|
|
||||||
- 前端通过 `src/config/index.ts` 读取并解析:
|
|
||||||
- `appName` 与 `appConfig`
|
|
||||||
- `imgHost` 将回退到 `appUrl`(若存在)
|
|
||||||
|
|
||||||
## 开发与构建
|
|
||||||
- 开发服务:`npm run dev -- dy`
|
|
||||||
- 写入 `.env.development`
|
|
||||||
- 启动命令:`vite --port 3001 --host`
|
|
||||||
- 访问 `http://localhost:3001/`
|
|
||||||
- 构建产物:`npm run build -- dy`
|
|
||||||
- 输出目录:`html/`
|
|
||||||
- 预览构建结果:`npm run preview`
|
|
||||||
- 默认端口见 `vite.config.ts`(示例:`8000`)
|
|
||||||
|
|
||||||
## 接口与代理
|
|
||||||
- 统一通过 `/api` 访问后端接口(见 `vite.config.ts` 中 `server.proxy`)。
|
|
||||||
- 示例:`/api/login`、`/api/register`、`/api/captcha/new`、`/api/upload` 等
|
|
||||||
- 默认代理目标示例:`http://192.168.1.168:8090`(请按需修改)
|
|
||||||
- 响应拦截:
|
|
||||||
- 登录态失效(`code === 401`)自动跳转 `'/login'`
|
|
||||||
- 业务错误通过 `ElMessage` 提示
|
|
||||||
- `blob` 响应(验证码图片)直接返回原始数据,避免按业务码处理
|
|
||||||
|
|
||||||
## 主要功能模块
|
|
||||||
- 登录、注册与验证码
|
|
||||||
- 登录提交:账号、密码、验证码
|
|
||||||
- 注册提交:账号、密码、确认密码、验证码
|
|
||||||
- 验证码接口:`GET /api/captcha/new`,前端 `blob` 展示并支持刷新
|
|
||||||
- 截图生成与图片上传
|
|
||||||
- 图片上传走 `/api/upload`,上传成功后更新预览数据
|
|
||||||
- 头像、评论图片等均可在页面操作与替换
|
|
||||||
|
|
||||||
## 关键文件
|
|
||||||
- `src/views/common/login/index.vue`:登录/注册页,集成验证码展示与刷新逻辑
|
|
||||||
- `src/store/user.ts`:用户状态与登录提交逻辑(含验证码校验)
|
|
||||||
- `src/api/login.ts`:登录、注册、验证码 API 封装
|
|
||||||
- `src/request/index.ts`:Axios 实例与拦截器(401 处理、blob 直返)
|
|
||||||
- `vite.config.ts`:Vite 插件、构建与开发代理配置
|
|
||||||
- `bin/index.js`:根据 `appname` 写入 `.env.*` 并调用 Vite(开发/构建)
|
|
||||||
|
|
||||||
## 常见问题
|
|
||||||
- 开发脚本必须携带 `appname`:`npm run dev -- dy`
|
|
||||||
- 后端地址变化需修改 `vite.config.ts` 中代理目标
|
|
||||||
- 验证码刷新:前端会带时间戳参数避免缓存
|
|
||||||
- 401 未授权:自动清理登录态并跳转登录页
|
|
||||||
|
|
||||||
## 许可
|
|
||||||
本项目供内部或学习交流使用,若需开源协议请自行补充。
|
|
||||||
63
auto-imports.d.ts
vendored
@ -1,63 +0,0 @@
|
|||||||
/* eslint-disable */
|
|
||||||
/* prettier-ignore */
|
|
||||||
// @ts-nocheck
|
|
||||||
// Generated by unplugin-auto-import
|
|
||||||
export {}
|
|
||||||
declare global {
|
|
||||||
const EffectScope: typeof import('vue')['EffectScope']
|
|
||||||
const computed: typeof import('vue')['computed']
|
|
||||||
const createApp: typeof import('vue')['createApp']
|
|
||||||
const customRef: typeof import('vue')['customRef']
|
|
||||||
const defineAsyncComponent: typeof import('vue')['defineAsyncComponent']
|
|
||||||
const defineComponent: typeof import('vue')['defineComponent']
|
|
||||||
const effectScope: typeof import('vue')['effectScope']
|
|
||||||
const getCurrentInstance: typeof import('vue')['getCurrentInstance']
|
|
||||||
const getCurrentScope: typeof import('vue')['getCurrentScope']
|
|
||||||
const h: typeof import('vue')['h']
|
|
||||||
const inject: typeof import('vue')['inject']
|
|
||||||
const isProxy: typeof import('vue')['isProxy']
|
|
||||||
const isReactive: typeof import('vue')['isReactive']
|
|
||||||
const isReadonly: typeof import('vue')['isReadonly']
|
|
||||||
const isRef: typeof import('vue')['isRef']
|
|
||||||
const markRaw: typeof import('vue')['markRaw']
|
|
||||||
const nextTick: typeof import('vue')['nextTick']
|
|
||||||
const onActivated: typeof import('vue')['onActivated']
|
|
||||||
const onBeforeMount: typeof import('vue')['onBeforeMount']
|
|
||||||
const onBeforeUnmount: typeof import('vue')['onBeforeUnmount']
|
|
||||||
const onBeforeUpdate: typeof import('vue')['onBeforeUpdate']
|
|
||||||
const onDeactivated: typeof import('vue')['onDeactivated']
|
|
||||||
const onErrorCaptured: typeof import('vue')['onErrorCaptured']
|
|
||||||
const onMounted: typeof import('vue')['onMounted']
|
|
||||||
const onRenderTracked: typeof import('vue')['onRenderTracked']
|
|
||||||
const onRenderTriggered: typeof import('vue')['onRenderTriggered']
|
|
||||||
const onScopeDispose: typeof import('vue')['onScopeDispose']
|
|
||||||
const onServerPrefetch: typeof import('vue')['onServerPrefetch']
|
|
||||||
const onUnmounted: typeof import('vue')['onUnmounted']
|
|
||||||
const onUpdated: typeof import('vue')['onUpdated']
|
|
||||||
const provide: typeof import('vue')['provide']
|
|
||||||
const reactive: typeof import('vue')['reactive']
|
|
||||||
const readonly: typeof import('vue')['readonly']
|
|
||||||
const ref: typeof import('vue')['ref']
|
|
||||||
const resolveComponent: typeof import('vue')['resolveComponent']
|
|
||||||
const shallowReactive: typeof import('vue')['shallowReactive']
|
|
||||||
const shallowReadonly: typeof import('vue')['shallowReadonly']
|
|
||||||
const shallowRef: typeof import('vue')['shallowRef']
|
|
||||||
const toRaw: typeof import('vue')['toRaw']
|
|
||||||
const toRef: typeof import('vue')['toRef']
|
|
||||||
const toRefs: typeof import('vue')['toRefs']
|
|
||||||
const triggerRef: typeof import('vue')['triggerRef']
|
|
||||||
const unref: typeof import('vue')['unref']
|
|
||||||
const useAttrs: typeof import('vue')['useAttrs']
|
|
||||||
const useCssModule: typeof import('vue')['useCssModule']
|
|
||||||
const useCssVars: typeof import('vue')['useCssVars']
|
|
||||||
const useSlots: typeof import('vue')['useSlots']
|
|
||||||
const watch: typeof import('vue')['watch']
|
|
||||||
const watchEffect: typeof import('vue')['watchEffect']
|
|
||||||
const watchPostEffect: typeof import('vue')['watchPostEffect']
|
|
||||||
const watchSyncEffect: typeof import('vue')['watchSyncEffect']
|
|
||||||
}
|
|
||||||
// for type re-export
|
|
||||||
declare global {
|
|
||||||
// @ts-ignore
|
|
||||||
export type { Component, ComponentPublicInstance, ComputedRef, InjectionKey, PropType, Ref, VNode } from 'vue'
|
|
||||||
}
|
|
||||||
23
bin/fs.js
@ -1,23 +0,0 @@
|
|||||||
const fs = require('fs');
|
|
||||||
const consola = require('consola');
|
|
||||||
|
|
||||||
class Fs {
|
|
||||||
writeFile(filepath, string, callback) {
|
|
||||||
const write = fs.writeFile(filepath, string, (err, written, string) => {
|
|
||||||
if (err) {
|
|
||||||
consola.error(`写入失败`, err);
|
|
||||||
callback(false);
|
|
||||||
} else {
|
|
||||||
consola.success(`写入成功`);
|
|
||||||
callback(true);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
readFile(filepath) {
|
|
||||||
const data = fs.readFileSync(filepath);
|
|
||||||
return data.toString();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = Fs;
|
|
||||||
113
bin/index.js
@ -1,113 +0,0 @@
|
|||||||
const path = require('path');
|
|
||||||
const consola = require('consola');
|
|
||||||
const { exec } = require('child_process');
|
|
||||||
|
|
||||||
const Fs = require('./fs');
|
|
||||||
|
|
||||||
class Index {
|
|
||||||
constructor() {
|
|
||||||
this.fs = new Fs();
|
|
||||||
}
|
|
||||||
|
|
||||||
start() {
|
|
||||||
// console.log('argv', argv);
|
|
||||||
console.log('✨ Start');
|
|
||||||
this.command = process.argv[2];
|
|
||||||
this.appname = process.argv[3];
|
|
||||||
this.initConfig();
|
|
||||||
const check = this.checkCommand();
|
|
||||||
if (check) {
|
|
||||||
consola.success(`参数校验完成`);
|
|
||||||
this.executeCommand();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
initConfig() {
|
|
||||||
consola.info('正在初始化配置');
|
|
||||||
try {
|
|
||||||
const string = this.fs.readFile(
|
|
||||||
path.join(__dirname, '../config/index.json')
|
|
||||||
);
|
|
||||||
this.appConfig = JSON.parse(string);
|
|
||||||
} catch (error) {
|
|
||||||
consola.error('初始化失败, 错误信息如下:', error);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
checkCommand() {
|
|
||||||
consola.success('初始化完成');
|
|
||||||
if (!['dev', 'build'].includes(this.command)) {
|
|
||||||
consola.error('命令输入错误,请检查⚠️⚠️⚠️');
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (!this.appname) {
|
|
||||||
consola.error('appname不能为空⚠️⚠️⚠️');
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
const applist = Object.keys(this.appConfig);
|
|
||||||
if (!applist.includes(this.appname)) {
|
|
||||||
consola.error(`app"${this.appname}"不在预期范围内,请检查⚠️⚠️⚠️`);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
executeCommand() {
|
|
||||||
const config = JSON.stringify(this.appConfig[this.appname]);
|
|
||||||
const string = `VITE_APP_CONFIG="${config}"\nVITE_APP_NAME=${this.appname}`;
|
|
||||||
if (this.command === 'build') {
|
|
||||||
consola.info(`正在写入build配置`);
|
|
||||||
const prodFilePath = path.join(__dirname, '../.env.production');
|
|
||||||
this.fs.writeFile(prodFilePath, string, (status) => {
|
|
||||||
if (status) {
|
|
||||||
consola.success(`配置完成,开始打包`);
|
|
||||||
this.build();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
if (this.command === 'dev') {
|
|
||||||
consola.info(`正在写入服务配置`);
|
|
||||||
const devFilePath = path.join(__dirname, '../.env.development');
|
|
||||||
this.fs.writeFile(devFilePath, string, (status) => {
|
|
||||||
if (status) {
|
|
||||||
consola.success(`配置完成,开始启动服务`);
|
|
||||||
this.server();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
build() {
|
|
||||||
const ls = exec('vite build');
|
|
||||||
|
|
||||||
ls.stdout.on('data', (data) => {
|
|
||||||
consola.info(`build data: ${data}`);
|
|
||||||
});
|
|
||||||
|
|
||||||
ls.stderr.on('data', (data) => {
|
|
||||||
consola.error(`error: ${data}`);
|
|
||||||
});
|
|
||||||
|
|
||||||
ls.on('close', (code) => {
|
|
||||||
consola.success(`打包完成✅`);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
server() {
|
|
||||||
const ls = exec('vite --port 3001 --host');
|
|
||||||
ls.stdout.on('data', (data) => {
|
|
||||||
console.log(data);
|
|
||||||
});
|
|
||||||
|
|
||||||
ls.stderr.on('data', (data) => {
|
|
||||||
console.log(data);
|
|
||||||
});
|
|
||||||
|
|
||||||
ls.on('close', (code) => {
|
|
||||||
consola.success(`服务已经关闭`);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const index = new Index();
|
|
||||||
index.start();
|
|
||||||
@ -1,6 +0,0 @@
|
|||||||
{
|
|
||||||
"dy": {
|
|
||||||
"appName": "dy",
|
|
||||||
"accountList": [16888888887, 16888888888, 16888888889]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1 +0,0 @@
|
|||||||
<svg width="20" height="20" fill="#999" xmlns="http://www.w3.org/2000/svg" class="UGHpJg4D" viewBox="0 0 20 20"><g opacity="0.9"><path fill-rule="evenodd" clip-rule="evenodd" d="M6.148 4.783c.986-.139 1.92.21 2.723.923.11.098.174.238.177.385l.024 1.365 1.354 1a.528.528 0 01.116.731l-.999 1.4.672 1.419a.528.528 0 11-.954.451l-.805-1.699a.528.528 0 01.048-.532l.877-1.23-1.146-.845a.528.528 0 01-.214-.416l-.024-1.384c-.566-.442-1.14-.602-1.702-.523-1.167.164-2.115 1.507-1.893 3.088l.016.107.003.017.009.06.002.021c.029.156.097.384.186.622a3.75 3.75 0 00.267.586c.576.989 1.622 2.007 2.583 2.815a26.035 26.035 0 001.66 1.284l.033.023c.077.056.157.113.193.144.043.036.07.06.096.08a.309.309 0 00.058.035h.005a.137.137 0 00.045-.008c.049-.023.1-.04.154-.047.002 0 .006-.003.016-.01a.465.465 0 00.045-.036l.075-.072c.04-.04.118-.103.187-.158l.018-.014.031-.025c.086-.069.194-.155.32-.259.286-.233.664-.55 1.075-.923.82-.745 1.741-1.688 2.326-2.618.057-.135.106-.226.19-.356.029-.064.06-.131.092-.195.022-.042.05-.093.086-.146a3.821 3.821 0 00.185-.86c0-.02.003-.043.004-.056l.002-.016.008-.104c.108-1.546-.902-2.779-2.037-2.858-.645-.045-1.386.245-1.744.742a.528.528 0 11-.856-.617c.613-.85 1.74-1.244 2.673-1.178 1.87.13 3.154 2.023 3.017 3.985l-.01.126-.001.011c0 .017 0 .033-.002.05-.037.426-.127.77-.261 1.183a.527.527 0 01-.103.182v.001a2.626 2.626 0 00-.1.21.528.528 0 01-.047.084 1.178 1.178 0 00-.139.257.526.526 0 01-.039.076c-.662 1.07-1.684 2.107-2.534 2.879a28.07 28.07 0 01-1.444 1.223l-.032.026-.104.084c-.02.016-.024.02-.021.016a2.47 2.47 0 00-.017.017c-.104.104-.308.306-.625.378a1.156 1.156 0 01-.266.07c-.513.072-.835-.204-.995-.342l-.017-.014-.022-.016a27.104 27.104 0 01-1.858-1.43c-.977-.822-2.14-1.934-2.812-3.086a4.73 4.73 0 01-.347-.753 4.85 4.85 0 01-.245-.857.528.528 0 01-.006-.055l-.001-.006a5.489 5.489 0 01-.02-.132c-.28-1.994.894-4.014 2.791-4.28z" fill="#fff" fill-opacity="0.7"></path><path d="M9.713 14.655h0l.015-.01m-.015.01l-.001-.001m0 0h0l-.054-.05.002-.002m.053.053h-.001l-.03-.068m.03.067v-.002h0l-.006-.038.022.032m-.016.008v-.002h0l-.006-.038-.02-.03v.001h-.002a.086.086 0 01-.003.002m.03.067l-.052-.052h0m.069.044l-.022-.032.33-.235m-.308.267a.465.465 0 00.045-.037l.075-.072c.04-.04.118-.103.187-.158m0 0l-.046-.058.017-.014.032-.026.319-.258a27.11 27.11 0 001.072-.92c.817-.743 1.73-1.678 2.309-2.598.058-.134.108-.228.192-.357.027-.063.058-.13.09-.193.022-.041.05-.092.085-.145.098-.313.152-.541.177-.805l.001-.025.004-.059h0l.002-.016h0l.008-.103c.106-1.516-.884-2.703-1.967-2.779-.624-.043-1.338.24-1.678.712a.603.603 0 11-.978-.705c.631-.875 1.786-1.276 2.74-1.21 1.922.135 3.225 2.075 3.086 4.066l-.01.128-.001.007a.63.63 0 01-.003.053c-.037.434-.13.784-.264 1.2a.602.602 0 01-.113.204 2.66 2.66 0 00-.093.196.608.608 0 01-.052.096c-.073.109-.09.143-.132.244a.61.61 0 01-.045.087c-.668 1.079-1.696 2.12-2.548 2.894-.43.39-.825.721-1.12.962-.13.107-.242.196-.327.264h0l-.032.026-.104.084h0l-.02.016h0l-.012.012-.002.002c-.104.104-.319.317-.653.395-.088.034-.181.058-.278.072-.548.077-.891-.218-1.054-.358l-.001-.001-.013-.012-.003-.002-.018-.013h0A27.164 27.164 0 016.74 14.01c-.978-.823-2.149-1.941-2.828-3.104a4.81 4.81 0 01-.353-.766 4.924 4.924 0 01-.25-.871.606.606 0 01-.006-.058v-.002h0l-.02-.135c-.285-2.022.906-4.09 2.855-4.365 1.012-.142 1.967.218 2.783.942.126.112.2.271.202.44l.023 1.328 1.325.978a.603.603 0 01.132.835l-.973 1.363.653 1.38a.603.603 0 01-1.09.515l-.804-1.699a.603.603 0 01.054-.608l.834-1.169-1.086-.802a.603.603 0 01-.245-.474l-.024-1.349c-.542-.415-1.087-.56-1.617-.486-1.116.157-2.047 1.452-1.829 3.004l.016.105.003.017h0v.001a1.273 1.273 0 01.011.082c.028.15.095.372.182.606.095.255.193.464.253.56l.009.014-.065.038.065-.038c.569.977 1.607 1.989 2.566 2.795a25.964 25.964 0 001.656 1.281l.033.023-.044.061.044-.06.003.002c.075.054.156.112.195.146a1.936 1.936 0 00.12.095.602.602 0 01.163-.051 2.418 2.418 0 00.109-.1c.043-.041.123-.106.19-.16l.004-.002.046.058zm-.354.208a.082.082 0 00-.019.013l-.002.002m.02-.015l-.02.015m.02-.015s0 0 0 0h.001m0 0h0" stroke="#fff" stroke-opacity="0.7" stroke-width="0.15" stroke-linecap="round" stroke-linejoin="round"></path></g></svg>
|
|
||||||
|
Before Width: | Height: | Size: 4.1 KiB |
@ -1 +0,0 @@
|
|||||||
import{g as e}from"./get-intrinsic-3ea43993.js";import{f as t}from"./function-bind-9f8ce635.js";var n="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function r(e){if(e.__esModule)return e;var t=e.default;if("function"==typeof t){var n=function e(){if(this instanceof e){var n=[null];return n.push.apply(n,arguments),new(Function.bind.apply(t,n))}return t.apply(this,arguments)};n.prototype=t.prototype}else n={};return Object.defineProperty(n,"__esModule",{value:!0}),Object.keys(e).forEach((function(t){var r=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(n,t,r.get?r:{enumerable:!0,get:function(){return e[t]}})})),n}var o={};!function(n){var r=t,o=e,p=o("%Function.prototype.apply%"),i=o("%Function.prototype.call%"),a=o("%Reflect.apply%",!0)||r.call(i,p),l=o("%Object.getOwnPropertyDescriptor%",!0),f=o("%Object.defineProperty%",!0),u=o("%Math.max%");if(f)try{f({},"a",{value:1})}catch(s){f=null}n.exports=function(e){var t=a(r,i,arguments);l&&f&&(l(t,"length").configurable&&f(t,"length",{value:1+u(0,e.length-(arguments.length-1))}));return t};var c=function(){return a(r,p,arguments)};f?f(n.exports,"apply",{value:c}):n.exports.apply=c}({get exports(){return o},set exports(e){o=e}});var p=e,i=o,a=i(p("String.prototype.indexOf")),l=function(e,t){var n=p(e,!!t);return"function"==typeof n&&a(e,".prototype.")>-1?i(n):n};export{l as a,n as c,r as g};
|
|
||||||
@ -1 +0,0 @@
|
|||||||
<svg width="20" height="20" fill="#999" xmlns="http://www.w3.org/2000/svg" class="UGHpJg4D" viewBox="0 0 20 20"><path fill-rule="evenodd" clip-rule="evenodd" d="M7.646 4.168c-2.238 0-4.035 1.919-4.035 4.152l.002.13a.834.834 0 00-.001.073c.006.3.075.66.15.962.074.294.178.622.294.86.467 1.004 1.284 1.979 2.071 2.78a23.69 23.69 0 002.646 2.323l.015.012.012.01c.174.175.543.54 1.2.54h.019c.186 0 .63 0 1.028-.387l.033-.027c.033-.029.08-.067.14-.117l.003-.003c.436-.359 1.456-1.2 2.462-2.214.644-.646 1.312-1.396 1.822-2.17a7.94 7.94 0 00.2-.318.84.84 0 00.063-.13.956.956 0 01.11-.214.835.835 0 00.074-.144c.029-.073.05-.121.066-.154l.003-.007a.832.832 0 00.147-.29c.125-.444.21-.835.219-1.316a.82.82 0 00-.002-.067 5.39 5.39 0 00.002-.16c-.015-2.22-1.807-4.124-4.035-4.124-.845 0-1.667.262-2.316.789a4.029 4.029 0 00-2.392-.789zm7.076 4.153V8.424l-.002.07c0 .008 0 .022.002.039a3.065 3.065 0 01-.121.721 1.9 1.9 0 00-.078.144 3.297 3.297 0 00-.089.2c-.083.135-.137.24-.193.38a6.64 6.64 0 01-.124.195v.001c-.425.644-1.007 1.305-1.613 1.912l-.002.001a31.607 31.607 0 01-2.342 2.106l-.032.026-.12.1-.048-.046c-.05-.05-.119-.105-.152-.131l-.006-.005A22.003 22.003 0 017.32 11.96l-.003-.003c-.747-.76-1.408-1.577-1.753-2.323a3.149 3.149 0 01-.185-.555 3.468 3.468 0 01-.1-.553.964.964 0 000-.104V8.42a3.56 3.56 0 01-.001-.099c0-1.373 1.11-2.485 2.368-2.485.662 0 1.288.269 1.848.85a.833.833 0 001.282-.099c.33-.47.892-.751 1.578-.751 1.258 0 2.368 1.113 2.368 2.485z" fill-opacity="0.7" opacity="0.9"></path></svg>
|
|
||||||
|
Before Width: | Height: | Size: 1.5 KiB |
@ -1,8 +0,0 @@
|
|||||||
/*!
|
|
||||||
* escape-html
|
|
||||||
* Copyright(c) 2012-2013 TJ Holowaychuk
|
|
||||||
* Copyright(c) 2015 Andreas Lubbe
|
|
||||||
* Copyright(c) 2015 Tiancheng "Timothy" Gu
|
|
||||||
* MIT Licensed
|
|
||||||
*/
|
|
||||||
var e=/["'&<>]/,a=function(a){var r,t=""+a,s=e.exec(t);if(!s)return t;var c="",n=0,u=0;for(n=s.index;n<t.length;n++){switch(t.charCodeAt(n)){case 34:r=""";break;case 38:r="&";break;case 39:r="'";break;case 60:r="<";break;case 62:r=">";break;default:continue}u!==n&&(c+=t.substring(u,n)),u=n+1,c+=r}return u!==n?c+t.substring(u,n):c};export{a as e};
|
|
||||||
@ -1 +0,0 @@
|
|||||||
var t="Function.prototype.bind called on incompatible ",n=Array.prototype.slice,o=Object.prototype.toString,r="[object Function]",e=function(e){var p=this;if("function"!=typeof p||o.call(p)!==r)throw new TypeError(t+p);for(var i,c=n.call(arguments,1),a=Math.max(0,p.length-c.length),l=[],u=0;u<a;u++)l.push("$"+u);if(i=Function("binder","return function ("+l.join(",")+"){ return binder.apply(this,arguments); }")((function(){if(this instanceof i){var t=p.apply(this,c.concat(n.call(arguments)));return Object(t)===t?t:this}return p.apply(e,c.concat(n.call(arguments)))})),p.prototype){var y=function(){};y.prototype=p.prototype,i.prototype=new y,y.prototype=null}return i},p=Function.prototype.bind||e;export{p as f};
|
|
||||||
@ -1 +0,0 @@
|
|||||||
import{f as o}from"./function-bind-9f8ce635.js";var t=o.call(Function.call,Object.prototype.hasOwnProperty);export{t as s};
|
|
||||||
@ -1 +0,0 @@
|
|||||||
var t="undefined"!=typeof Symbol&&Symbol,e=function(){if("function"!=typeof Symbol||"function"!=typeof Object.getOwnPropertySymbols)return!1;if("symbol"==typeof Symbol.iterator)return!0;var t={},e=Symbol("test"),r=Object(e);if("string"==typeof e)return!1;if("[object Symbol]"!==Object.prototype.toString.call(e))return!1;if("[object Symbol]"!==Object.prototype.toString.call(r))return!1;for(e in t[e]=42,t)return!1;if("function"==typeof Object.keys&&0!==Object.keys(t).length)return!1;if("function"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(t).length)return!1;var o=Object.getOwnPropertySymbols(t);if(1!==o.length||o[0]!==e)return!1;if(!Object.prototype.propertyIsEnumerable.call(t,e))return!1;if("function"==typeof Object.getOwnPropertyDescriptor){var n=Object.getOwnPropertyDescriptor(t,e);if(42!==n.value||!0!==n.enumerable)return!1}return!0},r=function(){return"function"==typeof t&&("function"==typeof Symbol&&("symbol"==typeof t("foo")&&("symbol"==typeof Symbol("bar")&&e())))};export{r as h};
|
|
||||||
@ -1 +0,0 @@
|
|||||||
import{_ as s}from"./index-f21f203e.js";import{c as i,X as t,o,ag as e}from"./@vue-cf17e384.js";import"./vue-router-c40bccc1.js";import"./pinia-33d0c555.js";import"./vue-demi-71ba0ef2.js";import"./axios-5be20913.js";import"./qs-f8f1f6a9.js";import"./side-channel-0c5db805.js";import"./get-intrinsic-3ea43993.js";import"./has-symbols-456daba2.js";import"./function-bind-9f8ce635.js";import"./has-f488bb74.js";import"./call-bind-af784638.js";import"./object-inspect-843295b9.js";import"./element-plus-369aa9c7.js";import"./lodash-es-9f1a9679.js";import"./@vueuse-08f70020.js";import"./@element-plus-1ad8e14d.js";import"./@popperjs-0e77d79c.js";import"./@ctrl-91de2ec7.js";import"./dayjs-12bce37c.js";import"./async-validator-cf877c1f.js";import"./memoize-one-63ab667a.js";import"./escape-html-1935ddb3.js";import"./normalize-wheel-es-500438c6.js";import"./@floating-ui-c5dc13b6.js";import"./pinia-plugin-persist-70d140bd.js";const r={class:"h-screen flex items-center justify-center"};const p=s({},[["render",function(s,p){const m=e("el-empty");return o(),i("div",r,[t(m,{class:"",description:"404"})])}]]);export{p as default};
|
|
||||||
@ -1 +0,0 @@
|
|||||||
.c-icon[data-v-cfc4b6e8]{width:var(--489dead2);height:var(--489dead2);position:relative}.effect[data-v-a7e19ad1]{min-height:820px;line-height:normal}.operate[data-v-0867b298]{line-height:normal}
|
|
||||||
@ -1 +0,0 @@
|
|||||||
import{_ as s}from"./index-f21f203e.js";import{c as i,o as t}from"./@vue-cf17e384.js";import"./vue-router-c40bccc1.js";import"./pinia-33d0c555.js";import"./vue-demi-71ba0ef2.js";import"./axios-5be20913.js";import"./qs-f8f1f6a9.js";import"./side-channel-0c5db805.js";import"./get-intrinsic-3ea43993.js";import"./has-symbols-456daba2.js";import"./function-bind-9f8ce635.js";import"./has-f488bb74.js";import"./call-bind-af784638.js";import"./object-inspect-843295b9.js";import"./element-plus-369aa9c7.js";import"./lodash-es-9f1a9679.js";import"./@vueuse-08f70020.js";import"./@element-plus-1ad8e14d.js";import"./@popperjs-0e77d79c.js";import"./@ctrl-91de2ec7.js";import"./dayjs-12bce37c.js";import"./async-validator-cf877c1f.js";import"./memoize-one-63ab667a.js";import"./escape-html-1935ddb3.js";import"./normalize-wheel-es-500438c6.js";import"./@floating-ui-c5dc13b6.js";import"./pinia-plugin-persist-70d140bd.js";const o=s({},[["render",function(s,o){return t(),i("div",null,"me")}]]);export{o as default};
|
|
||||||
@ -1 +0,0 @@
|
|||||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1693075430368" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="34875" width="12" height="12" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M32 407.584A279.584 279.584 0 0 1 512 212.64a279.584 279.584 0 0 1 480 194.944 278.144 278.144 0 0 1-113.024 224.512L562.592 892.8a96 96 0 0 1-124.416-1.952L130.016 620.16A278.976 278.976 0 0 1 32 407.584z" p-id="34876" fill="#f62d5a"></path></svg>
|
|
||||||
|
Before Width: | Height: | Size: 580 B |
@ -1 +0,0 @@
|
|||||||
<svg t="1682103127837" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4742" width="200" height="200"><path d="M334.224 391.424c0-95.952 79.728-173.968 177.776-173.968 98.048 0 177.776 78.016 177.776 173.968 0 95.936-79.728 173.968-177.776 173.968-98.048 0-177.776-78.032-177.776-173.968M512.448 0h-0.896C291.232 0.224 112 175.744 112 391.424c0 109.424 88.928 265.024 176 391.424a2759.648 2759.648 0 0 0 161.824 211.44A81.104 81.104 0 0 0 512.048 1024h0.128a80.512 80.512 0 0 0 61.824-29.488A2756.736 2756.736 0 0 0 736 782.832c87.072-126.384 176-281.984 176-391.408C912 175.744 732.752 0.224 512.448 0" fill="#ffffff" p-id="4743"></path></svg>
|
|
||||||
|
Before Width: | Height: | Size: 688 B |
@ -1 +0,0 @@
|
|||||||
|
|
||||||
@ -1 +0,0 @@
|
|||||||
var t=Number.isNaN||function(t){return"number"==typeof t&&t!=t};function r(r,n){if(r.length!==n.length)return!1;for(var e=0;e<r.length;e++)if(l=r[e],u=n[e],!(l===u||t(l)&&t(u)))return!1;var l,u;return!0}function n(t,n){void 0===n&&(n=r);var e=null;function l(){for(var r=[],l=0;l<arguments.length;l++)r[l]=arguments[l];if(e&&e.lastThis===this&&n(r,e.lastArgs))return e.lastResult;var u=t.apply(this,r);return e={lastResult:u,lastArgs:r,lastThis:this},u}return l.clear=function(){e=null},l}export{n as m};
|
|
||||||
@ -1,15 +0,0 @@
|
|||||||
var e,n,t,i,r,o,a,d,u,c,l,s,f,p,w,m=!1;function x(){if(!m){m=!0;var x=navigator.userAgent,v=/(?:MSIE.(\d+\.\d+))|(?:(?:Firefox|GranParadiso|Iceweasel).(\d+\.\d+))|(?:Opera(?:.+Version.|.)(\d+\.\d+))|(?:AppleWebKit.(\d+(?:\.\d+)?))|(?:Trident\/\d+\.\d+.*rv:(\d+\.\d+))/.exec(x),h=/(Mac OS X)|(Windows)|(Linux)/.exec(x);if(s=/\b(iPhone|iP[ao]d)/.exec(x),f=/\b(iP[ao]d)/.exec(x),c=/Android/i.exec(x),p=/FBAN\/\w+;/i.exec(x),w=/Mobile/i.exec(x),l=!!/Win64/.exec(x),v){(e=v[1]?parseFloat(v[1]):v[5]?parseFloat(v[5]):NaN)&&document&&document.documentMode&&(e=document.documentMode);var N=/(?:Trident\/(\d+.\d+))/.exec(x);o=N?parseFloat(N[1])+4:e,n=v[2]?parseFloat(v[2]):NaN,t=v[3]?parseFloat(v[3]):NaN,(i=v[4]?parseFloat(v[4]):NaN)?(v=/(?:Chrome\/(\d+\.\d+))/.exec(x),r=v&&v[1]?parseFloat(v[1]):NaN):r=NaN}else e=n=t=r=i=NaN;if(h){if(h[1]){var M=/(?:Mac OS X (\d+(?:[._]\d+)?))/.exec(x);a=!M||parseFloat(M[1].replace("_","."))}else a=!1;d=!!h[2],u=!!h[3]}else a=d=u=!1}}var v,h={ie:function(){return x()||e},ieCompatibilityMode:function(){return x()||o>e},ie64:function(){return h.ie()&&l},firefox:function(){return x()||n},opera:function(){return x()||t},webkit:function(){return x()||i},safari:function(){return h.webkit()},chrome:function(){return x()||r},windows:function(){return x()||d},osx:function(){return x()||a},linux:function(){return x()||u},iphone:function(){return x()||s},mobile:function(){return x()||s||f||c||w},nativeApp:function(){return x()||p},android:function(){return x()||c},ipad:function(){return x()||f}},N=h,M=!!(typeof window<"u"&&window.document&&window.document.createElement),F={canUseDOM:M,canUseWorkers:typeof Worker<"u",canUseEventListeners:M&&!(!window.addEventListener&&!window.attachEvent),canUseViewport:M&&!!window.screen,isInWorker:!M};F.canUseDOM&&(v=document.implementation&&document.implementation.hasFeature&&!0!==document.implementation.hasFeature("",""));var D=function(e,n){if(!F.canUseDOM||n&&!("addEventListener"in document))return!1;var t="on"+e,i=t in document;if(!i){var r=document.createElement("div");r.setAttribute(t,"return;"),i="function"==typeof r[t]}return!i&&v&&"wheel"===e&&(i=document.implementation.hasFeature("Events.wheel","3.0")),i},b=10,E=40,O=800;function X(e){var n=0,t=0,i=0,r=0;return"detail"in e&&(t=e.detail),"wheelDelta"in e&&(t=-e.wheelDelta/120),"wheelDeltaY"in e&&(t=-e.wheelDeltaY/120),"wheelDeltaX"in e&&(n=-e.wheelDeltaX/120),"axis"in e&&e.axis===e.HORIZONTAL_AXIS&&(n=t,t=0),i=n*b,r=t*b,"deltaY"in e&&(r=e.deltaY),"deltaX"in e&&(i=e.deltaX),(i||r)&&e.deltaMode&&(1==e.deltaMode?(i*=E,r*=E):(i*=O,r*=O)),i&&!n&&(n=i<1?-1:1),r&&!t&&(t=r<1?-1:1),{spinX:n,spinY:t,pixelX:i,pixelY:r}}X.getEventType=function(){return N.firefox()?"DOMMouseScroll":D("wheel")?"wheel":"mousewheel"};var A=X;
|
|
||||||
/**
|
|
||||||
* Checks if an event is supported in the current execution environment.
|
|
||||||
*
|
|
||||||
* NOTE: This will not work correctly for non-generic events such as `change`,
|
|
||||||
* `reset`, `load`, `error`, and `select`.
|
|
||||||
*
|
|
||||||
* Borrows from Modernizr.
|
|
||||||
*
|
|
||||||
* @param {string} eventNameSuffix Event name, e.g. "click".
|
|
||||||
* @param {?boolean} capture Check if the capture phase is supported.
|
|
||||||
* @return {boolean} True if the event is supported.
|
|
||||||
* @internal
|
|
||||||
* @license Modernizr 3.0.0pre (Custom Build) | MIT
|
|
||||||
*/export{A as Y};
|
|
||||||
@ -1,6 +0,0 @@
|
|||||||
import{i as t}from"./vue-demi-71ba0ef2.js";import{ao as e,e as n,an as s,ac as o,G as a,aw as c,D as r,h as i,f as u,a0 as f,A as p,g as l,d as h,n as d,a9 as y,j as v}from"./@vue-cf17e384.js";
|
|
||||||
/*!
|
|
||||||
* pinia v2.0.32
|
|
||||||
* (c) 2023 Eduardo San Martin Morote
|
|
||||||
* @license MIT
|
|
||||||
*/let b;const _=t=>b=t,j=Symbol();function $(t){return t&&"object"==typeof t&&"[object Object]"===Object.prototype.toString.call(t)&&"function"!=typeof t.toJSON}var m,O;function g(){const o=e(!0),a=o.run((()=>n({})));let c=[],r=[];const i=s({install(t){_(i),i._a=t,t.provide(j,i),t.config.globalProperties.$pinia=i,r.forEach((t=>c.push(t))),r=[]},use(e){return this._a||t?c.push(e):r.push(e),this},_p:c,_a:null,_e:o,_s:new Map,state:a});return i}(O=m||(m={})).direct="direct",O.patchObject="patch object",O.patchFunction="patch function";const P=()=>{};function S(t,e,n,s=P){t.push(e);const o=()=>{const n=t.indexOf(e);n>-1&&(t.splice(n,1),s())};return!n&&l()&&h(o),o}function w(t,...e){t.slice().forEach((t=>{t(...e)}))}function E(t,e){t instanceof Map&&e instanceof Map&&e.forEach(((e,n)=>t.set(n,e))),t instanceof Set&&e instanceof Set&&e.forEach(t.add,t);for(const n in e){if(!e.hasOwnProperty(n))continue;const s=e[n],o=t[n];$(o)&&$(s)&&t.hasOwnProperty(n)&&!a(s)&&!c(s)?t[n]=E(o,s):t[n]=s}return t}const A=Symbol();const{assign:I}=Object;function M(t,r,i={},p,l,h){let y;const v=I({actions:{}},i),b={deep:!0};let j,O,g,M=s([]),x=s([]);const F=p.state.value[t];let k;function D(e){let n;j=O=!1,"function"==typeof e?(e(p.state.value[t]),n={type:m.patchFunction,storeId:t,events:g}):(E(p.state.value[t],e),n={type:m.patchObject,payload:e,storeId:t,events:g});const s=k=Symbol();d().then((()=>{k===s&&(j=!0)})),O=!0,w(M,n,p.state.value[t])}h||F||(p.state.value[t]={}),n({});const G=P;function J(e,n){return function(){_(p);const s=Array.from(arguments),o=[],a=[];let c;w(x,{args:s,name:e,store:q,after:function(t){o.push(t)},onError:function(t){a.push(t)}});try{c=n.apply(this&&this.$id===t?this:q,s)}catch(r){throw w(a,r),r}return c instanceof Promise?c.then((t=>(w(o,t),t))).catch((t=>(w(a,t),Promise.reject(t)))):(w(o,c),c)}}const N={_p:p,$id:t,$onAction:S.bind(null,x),$patch:D,$reset:G,$subscribe(e,n={}){const s=S(M,e,n.detached,(()=>o())),o=y.run((()=>u((()=>p.state.value[t]),(s=>{("sync"===n.flush?O:j)&&e({storeId:t,type:m.direct,events:g},s)}),I({},b,n))));return s},$dispose:function(){y.stop(),M=[],x=[],p._s.delete(t)}},q=f(N);p._s.set(t,q);const z=p._e.run((()=>(y=e(),y.run((()=>r())))));for(const e in z){const n=z[e];if(a(n)&&(!a(C=n)||!C.effect)||c(n))h||(!F||$(B=n)&&B.hasOwnProperty(A)||(a(n)?n.value=F[e]:E(n,F[e])),p.state.value[t][e]=n);else if("function"==typeof n){const t=J(e,n);z[e]=t,v.actions[e]=n}}var B,C;return I(q,z),I(o(q),z),Object.defineProperty(q,"$state",{get:()=>p.state.value[t],set:t=>{D((e=>{I(e,t)}))}}),p._p.forEach((t=>{I(q,y.run((()=>t({store:q,app:p._a,pinia:p,options:v}))))})),F&&h&&i.hydrate&&i.hydrate(q.$state,F),j=!0,O=!0,q}function x(t,e,n){let o,a;const c="function"==typeof e;function r(t,n){const r=i();(t=t||r&&p(j,null))&&_(t),(t=b)._s.has(o)||(c?M(o,e,a,t):function(t,e,n,o){const{state:a,actions:c,getters:r}=e,i=n.state.value[t];let u;u=M(t,(function(){i||(n.state.value[t]=a?a():{});const e=y(n.state.value[t]);return I(e,c,Object.keys(r||{}).reduce(((e,o)=>(e[o]=s(v((()=>{_(n);const e=n._s.get(t);return r[o].call(e,e)}))),e)),{}))}),e,n,0,!0),u.$reset=function(){const t=a?a():{};this.$patch((e=>{I(e,t)}))}}(o,a,t));return t._s.get(o)}return"string"==typeof t?(o=t,a=c?n:e):(a=t,o=t.id),r.$id=o,r}function F(t){{t=o(t);const e={};for(const n in t){const s=t[n];(a(s)||c(s))&&(e[n]=r(t,n))}return e}}export{g as c,x as d,F as s};
|
|
||||||
@ -1 +0,0 @@
|
|||||||
const s=(s,e)=>{const t=s.storage||sessionStorage,i=s.key||e.$id;if(s.paths){const o=s.paths.reduce(((s,t)=>(s[t]=e.$state[t],s)),{});t.setItem(i,JSON.stringify(o))}else t.setItem(i,JSON.stringify(e.$state))};var e=({options:e,store:t})=>{var i,o,r,a;if(null==(i=e.persist)?void 0:i.enabled){const i=[{key:t.$id,storage:sessionStorage}],n=(null==(r=null==(o=e.persist)?void 0:o.strategies)?void 0:r.length)?null==(a=e.persist)?void 0:a.strategies:i;n.forEach((e=>{const i=e.storage||sessionStorage,o=e.key||t.$id,r=i.getItem(o);r&&(t.$patch(JSON.parse(r)),s(e,t))})),t.$subscribe((()=>{n.forEach((e=>{s(e,t)}))}))}};export{e as i};
|
|
||||||
@ -1 +0,0 @@
|
|||||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1693069369550" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4238" id="mx_n_1693069369550" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M512 938.652444c-235.264 0-426.666667-191.402667-426.666667-426.666666s191.402667-426.666667 426.666667-426.666667 426.666667 191.402667 426.666667 426.666667c0 55.552-10.538667 109.639111-31.317334 160.739555a42.709333 42.709333 0 0 1-55.608889 23.438223 42.695111 42.695111 0 0 1-23.452444-55.608889A339.256889 339.256889 0 0 0 853.333333 511.985778c0-188.202667-153.130667-341.333333-341.333333-341.333334s-341.333333 153.130667-341.333333 341.333334 153.130667 341.333333 341.333333 341.333333c53.333333 0 104.391111-11.946667 151.736889-35.484444a42.666667 42.666667 0 0 1 38.001778 76.416A422.684444 422.684444 0 0 1 512 938.652444" fill="#888888" p-id="4239"></path><path d="M512 369.763556c-78.421333 0-142.222222 63.800889-142.222222 142.222222s63.800889 142.222222 142.222222 142.222222a142.222222 142.222222 0 0 0 142.222222-142.222222c0-78.421333-63.800889-142.222222-142.222222-142.222222m0 369.777777c-125.468444 0-227.555556-102.087111-227.555556-227.555555s102.087111-227.555556 227.555556-227.555556 227.555556 102.087111 227.555556 227.555556a227.498667 227.498667 0 0 1-227.555556 227.555555" fill="#888888" p-id="4240"></path><path d="M765.368889 782.791111c-7.822222 0-15.431111-0.768-22.755556-2.275555C689.749333 769.592889 654.222222 722.488889 654.222222 663.324444V327.096889a42.666667 42.666667 0 1 1 85.333334 0v336.213333c0 10.993778 2.631111 29.980444 20.337777 33.649778 19.569778 3.982222 49.322667-12.202667 68.750223-57.230222a42.680889 42.680889 0 0 1 78.364444 33.806222c-33.393778 77.312-91.562667 109.269333-141.653333 109.269333" fill="#888888" p-id="4241"></path></svg>
|
|
||||||
|
Before Width: | Height: | Size: 1.9 KiB |
@ -1 +0,0 @@
|
|||||||
import{g as e}from"./get-intrinsic-3ea43993.js";import{a as t}from"./call-bind-af784638.js";import{o as n}from"./object-inspect-843295b9.js";var o=e,r=t,a=n,f=o("%TypeError%"),i=o("%WeakMap%",!0),p=o("%Map%",!0),u=r("WeakMap.prototype.get",!0),s=r("WeakMap.prototype.set",!0),c=r("WeakMap.prototype.has",!0),y=r("Map.prototype.get",!0),l=r("Map.prototype.set",!0),x=r("Map.prototype.has",!0),v=function(e,t){for(var n,o=e;null!==(n=o.next);o=n)if(n.key===t)return o.next=n.next,n.next=e.next,e.next=n,n},M=function(){var e,t,n,o={assert:function(e){if(!o.has(e))throw new f("Side channel does not contain "+a(e))},get:function(o){if(i&&o&&("object"==typeof o||"function"==typeof o)){if(e)return u(e,o)}else if(p){if(t)return y(t,o)}else if(n)return function(e,t){var n=v(e,t);return n&&n.value}(n,o)},has:function(o){if(i&&o&&("object"==typeof o||"function"==typeof o)){if(e)return c(e,o)}else if(p){if(t)return x(t,o)}else if(n)return function(e,t){return!!v(e,t)}(n,o);return!1},set:function(o,r){i&&o&&("object"==typeof o||"function"==typeof o)?(e||(e=new i),s(e,o,r)):p?(t||(t=new p),l(t,o,r)):(n||(n={key:{},next:null}),function(e,t,n){var o=v(e,t);o?o.value=n:e.next={key:t,next:e.next,value:n}}(n,o,r))}};return o};export{M as s};
|
|
||||||
@ -1 +0,0 @@
|
|||||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1693070665275" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="26800" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M512 938.7C276.4 938.7 85.3 747.6 85.3 512S276.4 85.3 512 85.3s426.7 191 426.7 426.7-191 426.7-426.7 426.7z m-170.7-384a170.7 170.7 0 1 0 341.3 0H341.3z m0-85.3a64 64 0 1 0 0-128 64 64 0 0 0 0 128z m341.3 0a64 64 0 1 0 0-128 64 64 0 0 0 0 128z" p-id="26801" fill="#888888"></path></svg>
|
|
||||||
|
Before Width: | Height: | Size: 620 B |
@ -1,10 +0,0 @@
|
|||||||
<svg
|
|
||||||
viewBox="0 0 1024 1024"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
width="36"
|
|
||||||
height="36"
|
|
||||||
class="comment-input-icon"
|
|
||||||
>
|
|
||||||
<path d="M512 74.667C270.933 74.667 74.667 270.933 74.667 512S270.933 949.333 512 949.333 949.333 753.067 949.333 512 753.067 74.667 512 74.667zm0 810.666C307.2 885.333 138.667 716.8 138.667 512S307.2 138.667 512 138.667 885.333 307.2 885.333 512 716.8 885.333 512 885.333z" fill="#2F3035"></path>
|
|
||||||
<path d="M682.667 480H544V341.333c0-17.066-14.933-32-32-32s-32 14.934-32 32V480H341.333c-17.066 0-32 14.933-32 32s14.934 32 32 32H480v138.667c0 17.066 14.933 32 32 32s32-14.934 32-32V544h138.667c17.066 0 32-14.933 32-32s-14.934-32-32-32z" fill="#2F3035"></path>
|
|
||||||
</svg>
|
|
||||||
|
Before Width: | Height: | Size: 682 B |
@ -1 +0,0 @@
|
|||||||
<svg width="36" height="36" fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36" class="comment-input-icon"><path fill-rule="evenodd" clip-rule="evenodd" d="M27 18a9 9 0 11-18 0 9 9 0 0118 0zm-9 11c6.075 0 11-4.925 11-11S24.075 7 18 7 7 11.925 7 18s4.925 11 11 11zm-2-13.5c0 1.105-.672 2-1.5 2s-1.5-.895-1.5-2 .672-2 1.5-2 1.5.895 1.5 2zm5.5 2c.828 0 1.5-.895 1.5-2s-.672-2-1.5-2-1.5.895-1.5 2 .672 2 1.5 2zM18 22.03c-1.657 0-3-.96-3-2.143 0-1.183 6-1.183 6 0 0 1.184-1.343 2.143-3 2.143z" fill="#2F3035" fill-opacity="0.9"></path></svg>
|
|
||||||
|
Before Width: | Height: | Size: 551 B |
@ -1 +0,0 @@
|
|||||||
|
|
||||||
@ -1 +0,0 @@
|
|||||||
var a=!1;export{a as i};
|
|
||||||
@ -1,42 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8" />
|
|
||||||
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
||||||
<title>模板工具</title>
|
|
||||||
<script type="module" crossorigin src="/assets/index-f21f203e.js"></script>
|
|
||||||
<link rel="modulepreload" crossorigin href="/assets/@vue-cf17e384.js">
|
|
||||||
<link rel="modulepreload" crossorigin href="/assets/vue-router-c40bccc1.js">
|
|
||||||
<link rel="modulepreload" crossorigin href="/assets/vue-demi-71ba0ef2.js">
|
|
||||||
<link rel="modulepreload" crossorigin href="/assets/pinia-33d0c555.js">
|
|
||||||
<link rel="modulepreload" crossorigin href="/assets/axios-5be20913.js">
|
|
||||||
<link rel="modulepreload" crossorigin href="/assets/has-symbols-456daba2.js">
|
|
||||||
<link rel="modulepreload" crossorigin href="/assets/function-bind-9f8ce635.js">
|
|
||||||
<link rel="modulepreload" crossorigin href="/assets/has-f488bb74.js">
|
|
||||||
<link rel="modulepreload" crossorigin href="/assets/get-intrinsic-3ea43993.js">
|
|
||||||
<link rel="modulepreload" crossorigin href="/assets/call-bind-af784638.js">
|
|
||||||
<link rel="modulepreload" crossorigin href="/assets/object-inspect-843295b9.js">
|
|
||||||
<link rel="modulepreload" crossorigin href="/assets/side-channel-0c5db805.js">
|
|
||||||
<link rel="modulepreload" crossorigin href="/assets/qs-f8f1f6a9.js">
|
|
||||||
<link rel="modulepreload" crossorigin href="/assets/lodash-es-9f1a9679.js">
|
|
||||||
<link rel="modulepreload" crossorigin href="/assets/@vueuse-08f70020.js">
|
|
||||||
<link rel="modulepreload" crossorigin href="/assets/@element-plus-1ad8e14d.js">
|
|
||||||
<link rel="modulepreload" crossorigin href="/assets/@popperjs-0e77d79c.js">
|
|
||||||
<link rel="modulepreload" crossorigin href="/assets/@ctrl-91de2ec7.js">
|
|
||||||
<link rel="modulepreload" crossorigin href="/assets/dayjs-12bce37c.js">
|
|
||||||
<link rel="modulepreload" crossorigin href="/assets/async-validator-cf877c1f.js">
|
|
||||||
<link rel="modulepreload" crossorigin href="/assets/memoize-one-63ab667a.js">
|
|
||||||
<link rel="modulepreload" crossorigin href="/assets/escape-html-1935ddb3.js">
|
|
||||||
<link rel="modulepreload" crossorigin href="/assets/normalize-wheel-es-500438c6.js">
|
|
||||||
<link rel="modulepreload" crossorigin href="/assets/@floating-ui-c5dc13b6.js">
|
|
||||||
<link rel="modulepreload" crossorigin href="/assets/element-plus-369aa9c7.js">
|
|
||||||
<link rel="modulepreload" crossorigin href="/assets/pinia-plugin-persist-70d140bd.js">
|
|
||||||
<link rel="stylesheet" href="/assets/element-plus-0d332a10.css">
|
|
||||||
<link rel="stylesheet" href="/assets/index-ceeb65c2.css">
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div id="app"></div>
|
|
||||||
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>
|
|
||||||
|
Before Width: | Height: | Size: 1.5 KiB |
13
index.html
@ -1,13 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8" />
|
|
||||||
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
||||||
<title>模板工具</title>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div id="app"></div>
|
|
||||||
<script type="module" src="/src/main.ts"></script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
13830
package-lock.json
generated
51
package.json
@ -1,51 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "school-teacher-training",
|
|
||||||
"private": true,
|
|
||||||
"version": "0.0.0",
|
|
||||||
"scripts": {
|
|
||||||
"dev": "node ./bin/index.js dev",
|
|
||||||
"build": "node ./bin/index.js build",
|
|
||||||
"preview": "vite preview --host"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"@element-plus/icons-vue": "^2.0.10",
|
|
||||||
"@vueuse/core": "^9.13.0",
|
|
||||||
"ali-oss": "^6.18.0",
|
|
||||||
"axios": "^1.3.4",
|
|
||||||
"canvg": "^1.5.3",
|
|
||||||
"consola": "^2.15.3",
|
|
||||||
"cross-env": "^7.0.3",
|
|
||||||
"crypto-js": "^4.1.1",
|
|
||||||
"dayjs": "^1.11.7",
|
|
||||||
"element-plus": "^2.0.5",
|
|
||||||
"esbuild": "^0.17.10",
|
|
||||||
"html2canvas": "^1.4.1",
|
|
||||||
"less": "^4.1.3",
|
|
||||||
"path": "^0.12.7",
|
|
||||||
"pinia": "^2.0.32",
|
|
||||||
"pinia-plugin-persist": "^1.0.0",
|
|
||||||
"qrcode.vue": "^3.3.3",
|
|
||||||
"qs": "^6.11.0",
|
|
||||||
"sass": "^1.58.3",
|
|
||||||
"sass-loader": "^13.2.0",
|
|
||||||
"terser": "^5.16.5",
|
|
||||||
"unplugin-auto-import": "^0.15.0",
|
|
||||||
"unplugin-icons": "^0.15.3",
|
|
||||||
"unplugin-vue-components": "^0.24.0",
|
|
||||||
"vite-plugin-inspect": "^0.7.15",
|
|
||||||
"vue": "^3.2.45",
|
|
||||||
"vue-router": "^4.1.6"
|
|
||||||
},
|
|
||||||
"devDependencies": {
|
|
||||||
"@iconify-json/ep": "^1.1.9",
|
|
||||||
"@vitejs/plugin-vue": "^4.0.0",
|
|
||||||
"autoprefixer": "^10.4.13",
|
|
||||||
"fast-glob": "^3.2.12",
|
|
||||||
"postcss": "^8.4.21",
|
|
||||||
"tailwindcss": "^3.2.7",
|
|
||||||
"typescript": "^4.9.3",
|
|
||||||
"vite": "^4.1.0",
|
|
||||||
"vite-plugin-svg-icons": "^2.0.1",
|
|
||||||
"vue-tsc": "^1.0.24"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,6 +0,0 @@
|
|||||||
module.exports = {
|
|
||||||
plugins: {
|
|
||||||
tailwindcss: {},
|
|
||||||
autoprefixer: {},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>
|
|
||||||
|
Before Width: | Height: | Size: 1.5 KiB |
26
src/App.vue
@ -1,26 +0,0 @@
|
|||||||
<script lang="ts" setup></script>
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<div>
|
|
||||||
<router-view />
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
|
||||||
/*定义滚动条高宽及背景 高宽分别对应横竖滚动条的尺寸*/
|
|
||||||
::-webkit-scrollbar {
|
|
||||||
width: 5px;
|
|
||||||
height: 5px;
|
|
||||||
background-color: #f5f5f5;
|
|
||||||
}
|
|
||||||
/*定义滚动条轨道 圆角*/
|
|
||||||
::-webkit-scrollbar-track {
|
|
||||||
border-radius: 10px;
|
|
||||||
background-color: #f5f5f5;
|
|
||||||
}
|
|
||||||
/*定义滑块 圆角*/
|
|
||||||
::-webkit-scrollbar-thumb {
|
|
||||||
border-radius: 10px;
|
|
||||||
background-color: #c8c8c8;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
@ -1,16 +0,0 @@
|
|||||||
import { requestFormData, request } from '@/request';
|
|
||||||
|
|
||||||
// 上传文件
|
|
||||||
export function uploadFile(file: any) {
|
|
||||||
const data: any = { module: 'scheme', uploadFile: file };
|
|
||||||
return requestFormData({ url: '/upload/file', data });
|
|
||||||
}
|
|
||||||
|
|
||||||
// 文件下载
|
|
||||||
export function downloadFileApi(params: any) {
|
|
||||||
return request({
|
|
||||||
url: 'upload/fileDownload',
|
|
||||||
method: 'get',
|
|
||||||
params,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
@ -1,48 +0,0 @@
|
|||||||
import { requestForm, request } from '@/request';
|
|
||||||
|
|
||||||
// 登录
|
|
||||||
export function PhoneLogin(data: any) {
|
|
||||||
return requestForm({ url: '/api/login', data });
|
|
||||||
}
|
|
||||||
|
|
||||||
export function sendCode(data) {
|
|
||||||
return requestForm({ url: '/user/smsSendCode', data });
|
|
||||||
}
|
|
||||||
|
|
||||||
// 获取图形码(旧)
|
|
||||||
export function captcha() {
|
|
||||||
return request({
|
|
||||||
url: '/user/captcha',
|
|
||||||
method: 'get',
|
|
||||||
responseType: 'blob',
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
//退出
|
|
||||||
export function logout() {
|
|
||||||
return requestForm({
|
|
||||||
url: '/user/logout',
|
|
||||||
method: 'get',
|
|
||||||
});
|
|
||||||
}
|
|
||||||
// 登录
|
|
||||||
export function login(data: any) {
|
|
||||||
return requestForm({ url: '/api/login', method: 'post', data });
|
|
||||||
}
|
|
||||||
|
|
||||||
// 新增:获取验证码(新)
|
|
||||||
export function getCaptchaNew(params?: any) {
|
|
||||||
return request({
|
|
||||||
url: '/api/captcha/new',
|
|
||||||
method: 'get',
|
|
||||||
responseType: 'blob',
|
|
||||||
// 某些服务端验证码依赖会话,开启携带凭证以提高兼容性
|
|
||||||
withCredentials: true,
|
|
||||||
params,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// 新增:注册
|
|
||||||
export function register(data: any) {
|
|
||||||
return requestForm({ url: '/api/register', method: 'post', data });
|
|
||||||
}
|
|
||||||
|
Before Width: | Height: | Size: 189 B |
@ -1 +0,0 @@
|
|||||||
<svg width="20" height="20" fill="#999" xmlns="http://www.w3.org/2000/svg" class="UGHpJg4D" viewBox="0 0 20 20"><g opacity="0.9"><path fill-rule="evenodd" clip-rule="evenodd" d="M6.148 4.783c.986-.139 1.92.21 2.723.923.11.098.174.238.177.385l.024 1.365 1.354 1a.528.528 0 01.116.731l-.999 1.4.672 1.419a.528.528 0 11-.954.451l-.805-1.699a.528.528 0 01.048-.532l.877-1.23-1.146-.845a.528.528 0 01-.214-.416l-.024-1.384c-.566-.442-1.14-.602-1.702-.523-1.167.164-2.115 1.507-1.893 3.088l.016.107.003.017.009.06.002.021c.029.156.097.384.186.622a3.75 3.75 0 00.267.586c.576.989 1.622 2.007 2.583 2.815a26.035 26.035 0 001.66 1.284l.033.023c.077.056.157.113.193.144.043.036.07.06.096.08a.309.309 0 00.058.035h.005a.137.137 0 00.045-.008c.049-.023.1-.04.154-.047.002 0 .006-.003.016-.01a.465.465 0 00.045-.036l.075-.072c.04-.04.118-.103.187-.158l.018-.014.031-.025c.086-.069.194-.155.32-.259.286-.233.664-.55 1.075-.923.82-.745 1.741-1.688 2.326-2.618.057-.135.106-.226.19-.356.029-.064.06-.131.092-.195.022-.042.05-.093.086-.146a3.821 3.821 0 00.185-.86c0-.02.003-.043.004-.056l.002-.016.008-.104c.108-1.546-.902-2.779-2.037-2.858-.645-.045-1.386.245-1.744.742a.528.528 0 11-.856-.617c.613-.85 1.74-1.244 2.673-1.178 1.87.13 3.154 2.023 3.017 3.985l-.01.126-.001.011c0 .017 0 .033-.002.05-.037.426-.127.77-.261 1.183a.527.527 0 01-.103.182v.001a2.626 2.626 0 00-.1.21.528.528 0 01-.047.084 1.178 1.178 0 00-.139.257.526.526 0 01-.039.076c-.662 1.07-1.684 2.107-2.534 2.879a28.07 28.07 0 01-1.444 1.223l-.032.026-.104.084c-.02.016-.024.02-.021.016a2.47 2.47 0 00-.017.017c-.104.104-.308.306-.625.378a1.156 1.156 0 01-.266.07c-.513.072-.835-.204-.995-.342l-.017-.014-.022-.016a27.104 27.104 0 01-1.858-1.43c-.977-.822-2.14-1.934-2.812-3.086a4.73 4.73 0 01-.347-.753 4.85 4.85 0 01-.245-.857.528.528 0 01-.006-.055l-.001-.006a5.489 5.489 0 01-.02-.132c-.28-1.994.894-4.014 2.791-4.28z" fill="#fff" fill-opacity="0.7"></path><path d="M9.713 14.655h0l.015-.01m-.015.01l-.001-.001m0 0h0l-.054-.05.002-.002m.053.053h-.001l-.03-.068m.03.067v-.002h0l-.006-.038.022.032m-.016.008v-.002h0l-.006-.038-.02-.03v.001h-.002a.086.086 0 01-.003.002m.03.067l-.052-.052h0m.069.044l-.022-.032.33-.235m-.308.267a.465.465 0 00.045-.037l.075-.072c.04-.04.118-.103.187-.158m0 0l-.046-.058.017-.014.032-.026.319-.258a27.11 27.11 0 001.072-.92c.817-.743 1.73-1.678 2.309-2.598.058-.134.108-.228.192-.357.027-.063.058-.13.09-.193.022-.041.05-.092.085-.145.098-.313.152-.541.177-.805l.001-.025.004-.059h0l.002-.016h0l.008-.103c.106-1.516-.884-2.703-1.967-2.779-.624-.043-1.338.24-1.678.712a.603.603 0 11-.978-.705c.631-.875 1.786-1.276 2.74-1.21 1.922.135 3.225 2.075 3.086 4.066l-.01.128-.001.007a.63.63 0 01-.003.053c-.037.434-.13.784-.264 1.2a.602.602 0 01-.113.204 2.66 2.66 0 00-.093.196.608.608 0 01-.052.096c-.073.109-.09.143-.132.244a.61.61 0 01-.045.087c-.668 1.079-1.696 2.12-2.548 2.894-.43.39-.825.721-1.12.962-.13.107-.242.196-.327.264h0l-.032.026-.104.084h0l-.02.016h0l-.012.012-.002.002c-.104.104-.319.317-.653.395-.088.034-.181.058-.278.072-.548.077-.891-.218-1.054-.358l-.001-.001-.013-.012-.003-.002-.018-.013h0A27.164 27.164 0 016.74 14.01c-.978-.823-2.149-1.941-2.828-3.104a4.81 4.81 0 01-.353-.766 4.924 4.924 0 01-.25-.871.606.606 0 01-.006-.058v-.002h0l-.02-.135c-.285-2.022.906-4.09 2.855-4.365 1.012-.142 1.967.218 2.783.942.126.112.2.271.202.44l.023 1.328 1.325.978a.603.603 0 01.132.835l-.973 1.363.653 1.38a.603.603 0 01-1.09.515l-.804-1.699a.603.603 0 01.054-.608l.834-1.169-1.086-.802a.603.603 0 01-.245-.474l-.024-1.349c-.542-.415-1.087-.56-1.617-.486-1.116.157-2.047 1.452-1.829 3.004l.016.105.003.017h0v.001a1.273 1.273 0 01.011.082c.028.15.095.372.182.606.095.255.193.464.253.56l.009.014-.065.038.065-.038c.569.977 1.607 1.989 2.566 2.795a25.964 25.964 0 001.656 1.281l.033.023-.044.061.044-.06.003.002c.075.054.156.112.195.146a1.936 1.936 0 00.12.095.602.602 0 01.163-.051 2.418 2.418 0 00.109-.1c.043-.041.123-.106.19-.16l.004-.002.046.058zm-.354.208a.082.082 0 00-.019.013l-.002.002m.02-.015l-.02.015m.02-.015s0 0 0 0h.001m0 0h0" stroke="#fff" stroke-opacity="0.7" stroke-width="0.15" stroke-linecap="round" stroke-linejoin="round"></path></g></svg>
|
|
||||||
|
Before Width: | Height: | Size: 4.1 KiB |
@ -1 +0,0 @@
|
|||||||
<svg width="20" height="20" fill="#999" xmlns="http://www.w3.org/2000/svg" class="UGHpJg4D" viewBox="0 0 20 20"><path fill-rule="evenodd" clip-rule="evenodd" d="M7.646 4.168c-2.238 0-4.035 1.919-4.035 4.152l.002.13a.834.834 0 00-.001.073c.006.3.075.66.15.962.074.294.178.622.294.86.467 1.004 1.284 1.979 2.071 2.78a23.69 23.69 0 002.646 2.323l.015.012.012.01c.174.175.543.54 1.2.54h.019c.186 0 .63 0 1.028-.387l.033-.027c.033-.029.08-.067.14-.117l.003-.003c.436-.359 1.456-1.2 2.462-2.214.644-.646 1.312-1.396 1.822-2.17a7.94 7.94 0 00.2-.318.84.84 0 00.063-.13.956.956 0 01.11-.214.835.835 0 00.074-.144c.029-.073.05-.121.066-.154l.003-.007a.832.832 0 00.147-.29c.125-.444.21-.835.219-1.316a.82.82 0 00-.002-.067 5.39 5.39 0 00.002-.16c-.015-2.22-1.807-4.124-4.035-4.124-.845 0-1.667.262-2.316.789a4.029 4.029 0 00-2.392-.789zm7.076 4.153V8.424l-.002.07c0 .008 0 .022.002.039a3.065 3.065 0 01-.121.721 1.9 1.9 0 00-.078.144 3.297 3.297 0 00-.089.2c-.083.135-.137.24-.193.38a6.64 6.64 0 01-.124.195v.001c-.425.644-1.007 1.305-1.613 1.912l-.002.001a31.607 31.607 0 01-2.342 2.106l-.032.026-.12.1-.048-.046c-.05-.05-.119-.105-.152-.131l-.006-.005A22.003 22.003 0 017.32 11.96l-.003-.003c-.747-.76-1.408-1.577-1.753-2.323a3.149 3.149 0 01-.185-.555 3.468 3.468 0 01-.1-.553.964.964 0 000-.104V8.42a3.56 3.56 0 01-.001-.099c0-1.373 1.11-2.485 2.368-2.485.662 0 1.288.269 1.848.85a.833.833 0 001.282-.099c.33-.47.892-.751 1.578-.751 1.258 0 2.368 1.113 2.368 2.485z" fill-opacity="0.7" opacity="0.9"></path></svg>
|
|
||||||
|
Before Width: | Height: | Size: 1.5 KiB |
@ -1 +0,0 @@
|
|||||||
<svg width="20" height="20" fill="none" xmlns="http://www.w3.org/2000/svg" class="UGHpJg4D" viewBox="0 0 20 20"><path fill-rule="evenodd" clip-rule="evenodd" d="M10.106 5.412c.571-.814 1.51-1.244 2.542-1.244 1.966 0 3.602 1.706 3.602 3.734l-.002.134V8.1a.03.03 0 00.002.009c-.008.427-.081.78-.212 1.245-.074.084-.143.241-.212.415-.108.168-.15.25-.212.415a8.504 8.504 0 01-.298.464c-.488.71-1.108 1.414-1.734 2.05-1.13 1.154-2.304 2.121-2.806 2.535-.134.11-.22.182-.245.206-.177.177-.354.177-.531.177h-.025c-.338-.009-.51-.182-.683-.355a1.39 1.39 0 00-.083-.07 25.514 25.514 0 01-3.037-2.685c-.814-.845-1.582-1.799-2.014-2.732-.177-.354-.398-1.197-.408-1.665.004-.004.003-.026.002-.071l-.002-.136c0-2.03 1.634-3.734 3.602-3.734 1.03 0 1.97.43 2.754 1.244z" fill="#FE2C55" opacity="0.9"></path></svg>
|
|
||||||
|
Before Width: | Height: | Size: 798 B |
@ -1 +0,0 @@
|
|||||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1693075430368" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="34875" width="12" height="12" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M32 407.584A279.584 279.584 0 0 1 512 212.64a279.584 279.584 0 0 1 480 194.944 278.144 278.144 0 0 1-113.024 224.512L562.592 892.8a96 96 0 0 1-124.416-1.952L130.016 620.16A278.976 278.976 0 0 1 32 407.584z" p-id="34876" fill="#f62d5a"></path></svg>
|
|
||||||
|
Before Width: | Height: | Size: 580 B |
@ -1 +0,0 @@
|
|||||||
<svg t="1682103127837" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4742" width="200" height="200"><path d="M334.224 391.424c0-95.952 79.728-173.968 177.776-173.968 98.048 0 177.776 78.016 177.776 173.968 0 95.936-79.728 173.968-177.776 173.968-98.048 0-177.776-78.032-177.776-173.968M512.448 0h-0.896C291.232 0.224 112 175.744 112 391.424c0 109.424 88.928 265.024 176 391.424a2759.648 2759.648 0 0 0 161.824 211.44A81.104 81.104 0 0 0 512.048 1024h0.128a80.512 80.512 0 0 0 61.824-29.488A2756.736 2756.736 0 0 0 736 782.832c87.072-126.384 176-281.984 176-391.408C912 175.744 732.752 0.224 512.448 0" fill="#ffffff" p-id="4743"></path></svg>
|
|
||||||
|
Before Width: | Height: | Size: 688 B |
@ -1 +0,0 @@
|
|||||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1693069369550" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4238" id="mx_n_1693069369550" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M512 938.652444c-235.264 0-426.666667-191.402667-426.666667-426.666666s191.402667-426.666667 426.666667-426.666667 426.666667 191.402667 426.666667 426.666667c0 55.552-10.538667 109.639111-31.317334 160.739555a42.709333 42.709333 0 0 1-55.608889 23.438223 42.695111 42.695111 0 0 1-23.452444-55.608889A339.256889 339.256889 0 0 0 853.333333 511.985778c0-188.202667-153.130667-341.333333-341.333333-341.333334s-341.333333 153.130667-341.333333 341.333334 153.130667 341.333333 341.333333 341.333333c53.333333 0 104.391111-11.946667 151.736889-35.484444a42.666667 42.666667 0 0 1 38.001778 76.416A422.684444 422.684444 0 0 1 512 938.652444" fill="#888888" p-id="4239"></path><path d="M512 369.763556c-78.421333 0-142.222222 63.800889-142.222222 142.222222s63.800889 142.222222 142.222222 142.222222a142.222222 142.222222 0 0 0 142.222222-142.222222c0-78.421333-63.800889-142.222222-142.222222-142.222222m0 369.777777c-125.468444 0-227.555556-102.087111-227.555556-227.555555s102.087111-227.555556 227.555556-227.555556 227.555556 102.087111 227.555556 227.555556a227.498667 227.498667 0 0 1-227.555556 227.555555" fill="#888888" p-id="4240"></path><path d="M765.368889 782.791111c-7.822222 0-15.431111-0.768-22.755556-2.275555C689.749333 769.592889 654.222222 722.488889 654.222222 663.324444V327.096889a42.666667 42.666667 0 1 1 85.333334 0v336.213333c0 10.993778 2.631111 29.980444 20.337777 33.649778 19.569778 3.982222 49.322667-12.202667 68.750223-57.230222a42.680889 42.680889 0 0 1 78.364444 33.806222c-33.393778 77.312-91.562667 109.269333-141.653333 109.269333" fill="#888888" p-id="4241"></path></svg>
|
|
||||||
|
Before Width: | Height: | Size: 1.9 KiB |
@ -1 +0,0 @@
|
|||||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1693070665275" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="26800" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M512 938.7C276.4 938.7 85.3 747.6 85.3 512S276.4 85.3 512 85.3s426.7 191 426.7 426.7-191 426.7-426.7 426.7z m-170.7-384a170.7 170.7 0 1 0 341.3 0H341.3z m0-85.3a64 64 0 1 0 0-128 64 64 0 0 0 0 128z m341.3 0a64 64 0 1 0 0-128 64 64 0 0 0 0 128z" p-id="26801" fill="#888888"></path></svg>
|
|
||||||
|
Before Width: | Height: | Size: 620 B |
@ -1,10 +0,0 @@
|
|||||||
<svg
|
|
||||||
viewBox="0 0 1024 1024"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
width="36"
|
|
||||||
height="36"
|
|
||||||
class="comment-input-icon"
|
|
||||||
>
|
|
||||||
<path d="M512 74.667C270.933 74.667 74.667 270.933 74.667 512S270.933 949.333 512 949.333 949.333 753.067 949.333 512 753.067 74.667 512 74.667zm0 810.666C307.2 885.333 138.667 716.8 138.667 512S307.2 138.667 512 138.667 885.333 307.2 885.333 512 716.8 885.333 512 885.333z" fill="#2F3035"></path>
|
|
||||||
<path d="M682.667 480H544V341.333c0-17.066-14.933-32-32-32s-32 14.934-32 32V480H341.333c-17.066 0-32 14.933-32 32s14.934 32 32 32H480v138.667c0 17.066 14.933 32 32 32s32-14.934 32-32V544h138.667c17.066 0 32-14.933 32-32s-14.934-32-32-32z" fill="#2F3035"></path>
|
|
||||||
</svg>
|
|
||||||
|
Before Width: | Height: | Size: 682 B |
@ -1 +0,0 @@
|
|||||||
<svg width="36" height="36" fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36" class="comment-input-icon"><path fill-rule="evenodd" clip-rule="evenodd" d="M27 18a9 9 0 11-18 0 9 9 0 0118 0zm-9 11c6.075 0 11-4.925 11-11S24.075 7 18 7 7 11.925 7 18s4.925 11 11 11zm-2-13.5c0 1.105-.672 2-1.5 2s-1.5-.895-1.5-2 .672-2 1.5-2 1.5.895 1.5 2zm5.5 2c.828 0 1.5-.895 1.5-2s-.672-2-1.5-2-1.5.895-1.5 2 .672 2 1.5 2zM18 22.03c-1.657 0-3-.96-3-2.143 0-1.183 6-1.183 6 0 0 1.184-1.343 2.143-3 2.143z" fill="#2F3035" fill-opacity="0.9"></path></svg>
|
|
||||||
|
Before Width: | Height: | Size: 551 B |
@ -1 +0,0 @@
|
|||||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1693072551245" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="32203" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M570.181818 512l197.818182-197.818182c13.963636-13.963636 13.963636-34.909091 0-48.872727-13.963636-13.963636-34.909091-13.963636-48.872727 0l-197.818182 197.818182-197.818182-197.818182c-13.963636-13.963636-34.909091-13.963636-48.872727 0-13.963636 13.963636-13.963636 34.909091 0 48.872727l197.818182 197.818182-197.818182 197.818182c-13.963636 13.963636-13.963636 34.909091 0 48.872727 13.963636 13.963636 34.909091 13.963636 48.872727 0l197.818182-197.818182 197.818182 197.818182c13.963636 13.963636 34.909091 13.963636 48.872727 0s13.963636-34.909091 0-48.872727L570.181818 512z" p-id="32204" fill="#888888"></path></svg>
|
|
||||||
|
Before Width: | Height: | Size: 961 B |
86
src/auto-imports.d.ts
vendored
@ -1,86 +0,0 @@
|
|||||||
/* eslint-disable */
|
|
||||||
/* prettier-ignore */
|
|
||||||
// @ts-nocheck
|
|
||||||
// Generated by unplugin-auto-import
|
|
||||||
export {}
|
|
||||||
declare global {
|
|
||||||
const EffectScope: typeof import('vue')['EffectScope']
|
|
||||||
const ElMessage: typeof import('element-plus/es')['ElMessage']
|
|
||||||
const ElMessageBox: typeof import('element-plus/es')['ElMessageBox']
|
|
||||||
const acceptHMRUpdate: typeof import('pinia')['acceptHMRUpdate']
|
|
||||||
const axios: typeof import('axios')['default']
|
|
||||||
const computed: typeof import('vue')['computed']
|
|
||||||
const createApp: typeof import('vue')['createApp']
|
|
||||||
const createPinia: typeof import('pinia')['createPinia']
|
|
||||||
const customRef: typeof import('vue')['customRef']
|
|
||||||
const defineAsyncComponent: typeof import('vue')['defineAsyncComponent']
|
|
||||||
const defineComponent: typeof import('vue')['defineComponent']
|
|
||||||
const defineStore: typeof import('pinia')['defineStore']
|
|
||||||
const effectScope: typeof import('vue')['effectScope']
|
|
||||||
const getActivePinia: typeof import('pinia')['getActivePinia']
|
|
||||||
const getCurrentInstance: typeof import('vue')['getCurrentInstance']
|
|
||||||
const getCurrentScope: typeof import('vue')['getCurrentScope']
|
|
||||||
const h: typeof import('vue')['h']
|
|
||||||
const inject: typeof import('vue')['inject']
|
|
||||||
const isProxy: typeof import('vue')['isProxy']
|
|
||||||
const isReactive: typeof import('vue')['isReactive']
|
|
||||||
const isReadonly: typeof import('vue')['isReadonly']
|
|
||||||
const isRef: typeof import('vue')['isRef']
|
|
||||||
const mapActions: typeof import('pinia')['mapActions']
|
|
||||||
const mapGetters: typeof import('pinia')['mapGetters']
|
|
||||||
const mapState: typeof import('pinia')['mapState']
|
|
||||||
const mapStores: typeof import('pinia')['mapStores']
|
|
||||||
const mapWritableState: typeof import('pinia')['mapWritableState']
|
|
||||||
const markRaw: typeof import('vue')['markRaw']
|
|
||||||
const nextTick: typeof import('vue')['nextTick']
|
|
||||||
const onActivated: typeof import('vue')['onActivated']
|
|
||||||
const onBeforeMount: typeof import('vue')['onBeforeMount']
|
|
||||||
const onBeforeRouteLeave: typeof import('vue-router')['onBeforeRouteLeave']
|
|
||||||
const onBeforeRouteUpdate: typeof import('vue-router')['onBeforeRouteUpdate']
|
|
||||||
const onBeforeUnmount: typeof import('vue')['onBeforeUnmount']
|
|
||||||
const onBeforeUpdate: typeof import('vue')['onBeforeUpdate']
|
|
||||||
const onDeactivated: typeof import('vue')['onDeactivated']
|
|
||||||
const onErrorCaptured: typeof import('vue')['onErrorCaptured']
|
|
||||||
const onMounted: typeof import('vue')['onMounted']
|
|
||||||
const onRenderTracked: typeof import('vue')['onRenderTracked']
|
|
||||||
const onRenderTriggered: typeof import('vue')['onRenderTriggered']
|
|
||||||
const onScopeDispose: typeof import('vue')['onScopeDispose']
|
|
||||||
const onServerPrefetch: typeof import('vue')['onServerPrefetch']
|
|
||||||
const onUnmounted: typeof import('vue')['onUnmounted']
|
|
||||||
const onUpdated: typeof import('vue')['onUpdated']
|
|
||||||
const provide: typeof import('vue')['provide']
|
|
||||||
const reactive: typeof import('vue')['reactive']
|
|
||||||
const readonly: typeof import('vue')['readonly']
|
|
||||||
const ref: typeof import('vue')['ref']
|
|
||||||
const resolveComponent: typeof import('vue')['resolveComponent']
|
|
||||||
const setActivePinia: typeof import('pinia')['setActivePinia']
|
|
||||||
const setMapStoreSuffix: typeof import('pinia')['setMapStoreSuffix']
|
|
||||||
const shallowReactive: typeof import('vue')['shallowReactive']
|
|
||||||
const shallowReadonly: typeof import('vue')['shallowReadonly']
|
|
||||||
const shallowRef: typeof import('vue')['shallowRef']
|
|
||||||
const storeToRefs: typeof import('pinia')['storeToRefs']
|
|
||||||
const toRaw: typeof import('vue')['toRaw']
|
|
||||||
const toRef: typeof import('vue')['toRef']
|
|
||||||
const toRefs: typeof import('vue')['toRefs']
|
|
||||||
const triggerRef: typeof import('vue')['triggerRef']
|
|
||||||
const unref: typeof import('vue')['unref']
|
|
||||||
const useAttrs: typeof import('vue')['useAttrs']
|
|
||||||
const useCssModule: typeof import('vue')['useCssModule']
|
|
||||||
const useCssVars: typeof import('vue')['useCssVars']
|
|
||||||
const useIntervalFn: typeof import('@vueuse/core')['useIntervalFn']
|
|
||||||
const useLink: typeof import('vue-router')['useLink']
|
|
||||||
const useMouse: typeof import('@vueuse/core')['useMouse']
|
|
||||||
const useMyFetch: typeof import('@vueuse/core')['useFetch']
|
|
||||||
const useRoute: typeof import('vue-router')['useRoute']
|
|
||||||
const useRouter: typeof import('vue-router')['useRouter']
|
|
||||||
const useSlots: typeof import('vue')['useSlots']
|
|
||||||
const watch: typeof import('vue')['watch']
|
|
||||||
const watchEffect: typeof import('vue')['watchEffect']
|
|
||||||
const watchPostEffect: typeof import('vue')['watchPostEffect']
|
|
||||||
const watchSyncEffect: typeof import('vue')['watchSyncEffect']
|
|
||||||
}
|
|
||||||
// for type re-export
|
|
||||||
declare global {
|
|
||||||
// @ts-ignore
|
|
||||||
export type { Component, ComponentPublicInstance, ComputedRef, InjectionKey, PropType, Ref, VNode } from 'vue'
|
|
||||||
}
|
|
||||||
16
src/components.d.ts
vendored
@ -1,16 +0,0 @@
|
|||||||
/* eslint-disable */
|
|
||||||
/* prettier-ignore */
|
|
||||||
// @ts-nocheck
|
|
||||||
// Generated by unplugin-vue-components
|
|
||||||
// Read more: https://github.com/vuejs/core/pull/3399
|
|
||||||
import '@vue/runtime-core'
|
|
||||||
|
|
||||||
export {}
|
|
||||||
|
|
||||||
declare module '@vue/runtime-core' {
|
|
||||||
export interface GlobalComponents {
|
|
||||||
RouterLink: typeof import('vue-router')['RouterLink']
|
|
||||||
RouterView: typeof import('vue-router')['RouterView']
|
|
||||||
SvgIcon: typeof import('./components/svg-icon/index.vue')['default']
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,33 +0,0 @@
|
|||||||
<script setup lang="ts">
|
|
||||||
interface Props {
|
|
||||||
name: string;
|
|
||||||
color?: string;
|
|
||||||
size?: string;
|
|
||||||
}
|
|
||||||
const props = withDefaults(defineProps<Props>(), {
|
|
||||||
name: "",
|
|
||||||
color: "#000",
|
|
||||||
size: "16px",
|
|
||||||
});
|
|
||||||
const iconName = computed(() => `#icon-${props.name}`);
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<svg
|
|
||||||
class="c-icon"
|
|
||||||
aria-hidden="true"
|
|
||||||
fill="none"
|
|
||||||
:height="size"
|
|
||||||
:width="size"
|
|
||||||
>
|
|
||||||
<use :xlink:href="iconName" :fill="color" />
|
|
||||||
</svg>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<style scoped lang="scss">
|
|
||||||
.c-icon {
|
|
||||||
width: v-bind(size);
|
|
||||||
height: v-bind(size);
|
|
||||||
position: relative;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
@ -1,9 +0,0 @@
|
|||||||
export const appName = import.meta.env.VITE_APP_NAME;
|
|
||||||
|
|
||||||
const getAppConfig = () => {
|
|
||||||
const appConfigString = import.meta.env.VITE_APP_CONFIG;
|
|
||||||
const appConfig = JSON.parse(appConfigString);
|
|
||||||
return { ...appConfig, imgHost: appConfig.imgHost || appConfig.appUrl };
|
|
||||||
};
|
|
||||||
|
|
||||||
export const appConfig = getAppConfig();
|
|
||||||
@ -1,3 +0,0 @@
|
|||||||
@tailwind base;
|
|
||||||
@tailwind components;
|
|
||||||
@tailwind utilities;
|
|
||||||
@ -1,3 +0,0 @@
|
|||||||
<template>
|
|
||||||
<router-view />
|
|
||||||
</template>
|
|
||||||
36
src/main.ts
@ -1,36 +0,0 @@
|
|||||||
import { createApp } from "vue";
|
|
||||||
|
|
||||||
import "./style.css";
|
|
||||||
import "./index.css";
|
|
||||||
import "@/style/global.scss";
|
|
||||||
import router from "./router";
|
|
||||||
import App from "./App.vue";
|
|
||||||
|
|
||||||
import { createPinia } from "pinia";
|
|
||||||
import piniaPluginPersist from "pinia-plugin-persist";
|
|
||||||
|
|
||||||
// import MainFooter from "./components/footer/index.vue";
|
|
||||||
|
|
||||||
import svgIcon from "./components/svg-icon/index.vue";
|
|
||||||
import "virtual:svg-icons-register";
|
|
||||||
import ElementPlus from "element-plus";
|
|
||||||
import "element-plus/dist/index.css";
|
|
||||||
import zhCn from "element-plus/dist/locale/zh-cn.mjs";
|
|
||||||
import * as ElementPlusIconsVue from "@element-plus/icons-vue";
|
|
||||||
const pinia = createPinia();
|
|
||||||
pinia.use(piniaPluginPersist);
|
|
||||||
const app = createApp(App);
|
|
||||||
|
|
||||||
app
|
|
||||||
|
|
||||||
// .component("main-footer", MainFooter)
|
|
||||||
|
|
||||||
.use(pinia)
|
|
||||||
.use(router)
|
|
||||||
.use(ElementPlus, {
|
|
||||||
locale: zhCn,
|
|
||||||
})
|
|
||||||
.mount("#app");
|
|
||||||
for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
|
|
||||||
app.component(key, component);
|
|
||||||
}
|
|
||||||
@ -1,224 +0,0 @@
|
|||||||
import axios from "axios";
|
|
||||||
import { stringify } from "qs";
|
|
||||||
import router from "@/router";
|
|
||||||
import { appConfig } from "@/config";
|
|
||||||
import useStore from "@/store/index";
|
|
||||||
import { storeToRefs } from "pinia";
|
|
||||||
import { ElMessage } from "element-plus";
|
|
||||||
|
|
||||||
interface IResult {
|
|
||||||
code?: number;
|
|
||||||
message?: string;
|
|
||||||
list?: Array<object>;
|
|
||||||
total?: number;
|
|
||||||
data?: any;
|
|
||||||
[propName: string]: any;
|
|
||||||
}
|
|
||||||
|
|
||||||
const whiteList: Array<string> = appConfig.apiWhiteList || [];
|
|
||||||
const baseURL: string = appConfig.apiBaseUrl || "/";
|
|
||||||
|
|
||||||
const service = axios.create({
|
|
||||||
baseURL,
|
|
||||||
timeout: 20 * 1000,
|
|
||||||
headers: { "Content-Type": "application/json" },
|
|
||||||
});
|
|
||||||
service.interceptors.request.use(
|
|
||||||
(config) => {
|
|
||||||
let useRequestStore = useStore();
|
|
||||||
const { useUserStore } = useRequestStore;
|
|
||||||
const { token } = storeToRefs(useUserStore);
|
|
||||||
if (token && token.value) {
|
|
||||||
config.headers = config.headers || {};
|
|
||||||
(config.headers as any).token = token.value;
|
|
||||||
(config.headers as any).Authorization = `Bearer ${token.value}`;
|
|
||||||
}
|
|
||||||
return config;
|
|
||||||
},
|
|
||||||
(error) => {
|
|
||||||
return Promise.reject(error);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
service.interceptors.response.use(
|
|
||||||
(response) => {
|
|
||||||
let useResponseStore = useStore();
|
|
||||||
let returnData: IResult = {};
|
|
||||||
|
|
||||||
const { useUserStore } = useResponseStore;
|
|
||||||
const url = response.config.url;
|
|
||||||
const res = response.data;
|
|
||||||
let href = window.location.href;
|
|
||||||
|
|
||||||
console.log("当前接口url=========", url);
|
|
||||||
// 对于二进制响应(如验证码图片),直接返回,不做业务码拦截
|
|
||||||
if (
|
|
||||||
response.config &&
|
|
||||||
(response.config.responseType === "blob" ||
|
|
||||||
response.request?.responseType === "blob")
|
|
||||||
) {
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
if (whiteList.includes(url)) {
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
console.log("当前接口返回数据=========", res);
|
|
||||||
// 如果业务code为401,拦截并跳转到登录页
|
|
||||||
if (res && res.code === 401) {
|
|
||||||
ElMessage({ message: "登录失效,请重新登录", type: "warning" });
|
|
||||||
try {
|
|
||||||
useUserStore.$patch({ token: "", isLogin: false });
|
|
||||||
} catch (e) {}
|
|
||||||
router.push("/login");
|
|
||||||
return { ...res, fail: true };
|
|
||||||
}
|
|
||||||
|
|
||||||
if (res.code !== 0) {
|
|
||||||
ElMessage({
|
|
||||||
message: res.message || "发生意外了错误",
|
|
||||||
type: "warning",
|
|
||||||
});
|
|
||||||
return {
|
|
||||||
...res,
|
|
||||||
fail: true,
|
|
||||||
};
|
|
||||||
} else if (res.data === 0) {
|
|
||||||
return res;
|
|
||||||
} else if (!res.data && !res.list) {
|
|
||||||
return { code: res.code, success: true };
|
|
||||||
} else if (res.data && res.data.list) {
|
|
||||||
returnData = {
|
|
||||||
code: res.code,
|
|
||||||
list: res.data.list,
|
|
||||||
total: Number(res.data.total),
|
|
||||||
object: res.data?.object,
|
|
||||||
};
|
|
||||||
|
|
||||||
return returnData;
|
|
||||||
}
|
|
||||||
return res;
|
|
||||||
},
|
|
||||||
(error) => {
|
|
||||||
console.log("error", error);
|
|
||||||
const { response } = error;
|
|
||||||
let useErrorStore = useStore();
|
|
||||||
const { useUserStore } = useErrorStore;
|
|
||||||
if (!response) {
|
|
||||||
ElMessage.error("网络连接超时,请稍后再试");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// 统一处理 HTTP 401 未授权:清理登录态并跳转登录页
|
|
||||||
if (response.status === 401) {
|
|
||||||
try {
|
|
||||||
useUserStore.$patch({ token: "", isLogin: false, temp: "", other: "" });
|
|
||||||
} catch (e) {}
|
|
||||||
ElMessage({ message: "登录失效,请重新登录", type: "warning" });
|
|
||||||
router.push("/login");
|
|
||||||
return Promise.reject(error);
|
|
||||||
}
|
|
||||||
if (response.status === 450) {
|
|
||||||
useUserStore.$patch({
|
|
||||||
token: "",
|
|
||||||
isLogin: false,
|
|
||||||
temp: "",
|
|
||||||
other: "",
|
|
||||||
user: {},
|
|
||||||
});
|
|
||||||
ElMessage({
|
|
||||||
message: "登陆态已失效,请重新登陆",
|
|
||||||
type: "warning",
|
|
||||||
});
|
|
||||||
// useUserStore.updateredirectUrl(href);
|
|
||||||
router.push("/login");
|
|
||||||
}
|
|
||||||
if (response.status === 502) {
|
|
||||||
ElMessage({
|
|
||||||
message: response.statusText,
|
|
||||||
type: "warning",
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
ElMessage({
|
|
||||||
message: response.data.message || "网关错误",
|
|
||||||
type: "error",
|
|
||||||
});
|
|
||||||
}
|
|
||||||
return Promise.reject(error);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
export default service;
|
|
||||||
|
|
||||||
export const request = (config) => {
|
|
||||||
return service({ method: "post", ...config });
|
|
||||||
};
|
|
||||||
|
|
||||||
export const requestForm = (config) => {
|
|
||||||
return service({
|
|
||||||
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
||||||
method: "post",
|
|
||||||
...config,
|
|
||||||
data: stringify(config.data),
|
|
||||||
});
|
|
||||||
};
|
|
||||||
export const requestIndicesForm = (config) => {
|
|
||||||
return service({
|
|
||||||
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
||||||
method: "post",
|
|
||||||
...config,
|
|
||||||
data: stringify(config.data, { indices: false }),
|
|
||||||
});
|
|
||||||
};
|
|
||||||
export const requestRaw = async (config) => {
|
|
||||||
let useRequestStore = useStore();
|
|
||||||
const { useUserStore } = useRequestStore;
|
|
||||||
const { token } = storeToRefs(useUserStore);
|
|
||||||
|
|
||||||
const { status, data } = await axios({
|
|
||||||
headers: { token: token.value },
|
|
||||||
method: "post",
|
|
||||||
...config,
|
|
||||||
});
|
|
||||||
returnData(status, data);
|
|
||||||
};
|
|
||||||
|
|
||||||
function returnData(status, data) {
|
|
||||||
if (status !== 200 || data.code !== 0) {
|
|
||||||
ElMessage({
|
|
||||||
message: "系统服务异常,请稍后再试",
|
|
||||||
type: "error",
|
|
||||||
duration: 5 * 1000,
|
|
||||||
});
|
|
||||||
return { fail: true };
|
|
||||||
}
|
|
||||||
if (data.data === 0) {
|
|
||||||
return data.data;
|
|
||||||
}
|
|
||||||
if (!data.data && !data.list) {
|
|
||||||
return { success: true };
|
|
||||||
}
|
|
||||||
return data.data;
|
|
||||||
}
|
|
||||||
|
|
||||||
export const requestRawForm = async (config) => {
|
|
||||||
const { status, data } = await axios({
|
|
||||||
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
||||||
method: "post",
|
|
||||||
...config,
|
|
||||||
data: stringify(config.data),
|
|
||||||
});
|
|
||||||
console.log("requestRawForm");
|
|
||||||
returnData(status, data);
|
|
||||||
};
|
|
||||||
|
|
||||||
export const requestFormData = async (config) => {
|
|
||||||
const formData = new FormData();
|
|
||||||
for (let key in config.data) {
|
|
||||||
formData.append(key, config.data[key]);
|
|
||||||
}
|
|
||||||
return service({
|
|
||||||
headers: { "Content-Type": "multipart/form-data" },
|
|
||||||
method: "post",
|
|
||||||
...config,
|
|
||||||
data: formData,
|
|
||||||
});
|
|
||||||
};
|
|
||||||
@ -1 +0,0 @@
|
|||||||
export const whiteApi = ["/api/captcha/new"];
|
|
||||||
@ -1,37 +0,0 @@
|
|||||||
import { RouteRecordRaw } from "vue-router";
|
|
||||||
|
|
||||||
export const commonRoutes: Array<RouteRecordRaw> = [
|
|
||||||
{ path: "/", redirect: "/home" },
|
|
||||||
|
|
||||||
{
|
|
||||||
name: "home",
|
|
||||||
path: "/home",
|
|
||||||
meta: { title: "首页" },
|
|
||||||
component: () => import("@/views/common/home/index.vue"),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "me",
|
|
||||||
path: "/me",
|
|
||||||
meta: { title: "我" },
|
|
||||||
component: () => import("@/views/common/me/index.vue"),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "login",
|
|
||||||
path: "/login",
|
|
||||||
meta: { title: "登录" },
|
|
||||||
component: () => import("@/views/common/login/index.vue"),
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
|
||||||
path: "/404",
|
|
||||||
name: "notFound",
|
|
||||||
meta: {
|
|
||||||
title: "404",
|
|
||||||
},
|
|
||||||
component: () => import("@/views/common/not-found/index.vue"),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: "/:pathMatch(.*)*",
|
|
||||||
redirect: "/404",
|
|
||||||
},
|
|
||||||
];
|
|
||||||
@ -1,35 +0,0 @@
|
|||||||
import { createRouter, createWebHistory } from "vue-router";
|
|
||||||
import { commonRoutes } from "@/router/common";
|
|
||||||
import useStore from "@/store/index";
|
|
||||||
import { storeToRefs } from "pinia";
|
|
||||||
|
|
||||||
const routes = commonRoutes;
|
|
||||||
const router = createRouter({
|
|
||||||
history: createWebHistory("/"),
|
|
||||||
routes,
|
|
||||||
scrollBehavior(to, form, savedPosition) {
|
|
||||||
if (savedPosition) {
|
|
||||||
return savedPosition;
|
|
||||||
} else {
|
|
||||||
return { top: 0 };
|
|
||||||
}
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
router.beforeEach(async (to, from, next) => {
|
|
||||||
const { useUserStore } = useStore();
|
|
||||||
const { isLogin, token } = storeToRefs(useUserStore);
|
|
||||||
// 若已获取到 token,则认为已登录,修正 isLogin
|
|
||||||
if (!isLogin.value && token && token.value) {
|
|
||||||
useUserStore.$patch({ isLogin: true });
|
|
||||||
}
|
|
||||||
if (!isLogin.value && to.name !== "login") {
|
|
||||||
ElMessage.error("暂未登录");
|
|
||||||
next({ name: "login" });
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
next();
|
|
||||||
});
|
|
||||||
|
|
||||||
export default router;
|
|
||||||
@ -1,170 +0,0 @@
|
|||||||
let firstLevelTemp = {
|
|
||||||
id: 1,
|
|
||||||
nickname: `测试昵称1`,
|
|
||||||
isAuthor: true, //是否作者
|
|
||||||
isLike: true, //是否点赞
|
|
||||||
likeCount: 3, //点赞个数
|
|
||||||
isDisLike: false, //是否不喜欢
|
|
||||||
disLikeCount: 0, //不喜欢个数
|
|
||||||
firstImgUrl: "",
|
|
||||||
firstImgList: [],
|
|
||||||
area: "广东", //省市
|
|
||||||
content: "6666666666666",
|
|
||||||
recoveryTime: "12-7", //回复时间
|
|
||||||
avatar: "https://cube.elemecdn.com/3/7c/3ea6beec64369c2642b92c6726f1epng.png",
|
|
||||||
recoveryList: [],
|
|
||||||
avatarList: [],
|
|
||||||
}; //一级评论模板
|
|
||||||
|
|
||||||
let secondLevelTemp = {
|
|
||||||
id: 11,
|
|
||||||
respondent: "测试二级", //回复人
|
|
||||||
isRespondentAuthor: true, //回复人是不是作者
|
|
||||||
recipient: "测试2", //被回复人
|
|
||||||
isRecipientAuthor: false, //被回复人是不是作者
|
|
||||||
isAuthor: true, //是否作者
|
|
||||||
isLike: true, //是否点赞
|
|
||||||
likeCount: 3, //点赞个数
|
|
||||||
isDisLike: false, //是否不喜欢
|
|
||||||
disLikeCount: 0, //不喜欢个
|
|
||||||
area: "广东", //省市
|
|
||||||
content: "77777777777",
|
|
||||||
recoveryTime: "12-7", //回复时间
|
|
||||||
avatarList: [],
|
|
||||||
secondImgUrl: "",
|
|
||||||
secondImgList: [],
|
|
||||||
avatar: "https://cube.elemecdn.com/3/7c/3ea6beec64369c2642b92c6726f1epng.png",
|
|
||||||
}; //二级评论模板
|
|
||||||
|
|
||||||
const useFormDataStore = defineStore("formDataStore", {
|
|
||||||
state: () => {
|
|
||||||
return {
|
|
||||||
firstLevelTemp,
|
|
||||||
secondLevelTemp,
|
|
||||||
firstLevelTempId: 1, //一级评论id
|
|
||||||
secondLevelTempId: 1, //二级评论id
|
|
||||||
headerType: 1, //1是显示地区 2是显示大家都在搜
|
|
||||||
commentLabel: '条评论', //评论条数单位
|
|
||||||
everyoneSearch: {
|
|
||||||
label:'大家都在搜',
|
|
||||||
title: "邓紫棋神仙现场",
|
|
||||||
},
|
|
||||||
AuthorTitle:'作者',
|
|
||||||
replyTitle: '回复',
|
|
||||||
regionalInfo: {
|
|
||||||
currentArea: "测试地区",
|
|
||||||
viewCount: 300, //多少人看过
|
|
||||||
viewUnit: "万", //单位
|
|
||||||
},
|
|
||||||
total: 666, //多少条评论
|
|
||||||
data: [],
|
|
||||||
};
|
|
||||||
},
|
|
||||||
persist: {
|
|
||||||
enabled: true,
|
|
||||||
strategies: [{ key: "form_data_store", storage: localStorage }],
|
|
||||||
},
|
|
||||||
actions: {
|
|
||||||
// 顶部信息更改
|
|
||||||
changeHeaderType(params) {
|
|
||||||
console.log(params);
|
|
||||||
this.headerType = params;
|
|
||||||
},
|
|
||||||
// 添加一级评论模板
|
|
||||||
addFirstLevelTemp() {
|
|
||||||
this.data.push({ ...this.firstLevelTemp, id: this.firstLevelTempId });
|
|
||||||
this.firstLevelTempId++;
|
|
||||||
},
|
|
||||||
// 添加二级评论模板
|
|
||||||
addSecondLevel(params: any) {
|
|
||||||
console.log("item", params);
|
|
||||||
this.data = this.data.map((item: any) => {
|
|
||||||
if (item.id === params.id) {
|
|
||||||
console.log(item.recoveryList);
|
|
||||||
let arr = [{ ...this.secondLevelTemp, id: this.secondLevelTempId }];
|
|
||||||
item.recoveryList = item.recoveryList.concat(arr);
|
|
||||||
|
|
||||||
this.secondLevelTempId++;
|
|
||||||
}
|
|
||||||
return item;
|
|
||||||
});
|
|
||||||
},
|
|
||||||
// 移除一级评论模板
|
|
||||||
removeFirstLevelTemp(params) {
|
|
||||||
console.log("移除一级评论模板", params);
|
|
||||||
this.data = this.data.filter((item) => item.id !== params.id);
|
|
||||||
},
|
|
||||||
// 移除二级评论模板
|
|
||||||
removeSecondLevel(father, children) {
|
|
||||||
this.data = this.data.map((item) => {
|
|
||||||
let recoveryList = item.recoveryList.filter(
|
|
||||||
(ctem) => ctem.id !== children.id
|
|
||||||
);
|
|
||||||
return {
|
|
||||||
...item,
|
|
||||||
recoveryList,
|
|
||||||
};
|
|
||||||
});
|
|
||||||
},
|
|
||||||
// 改变一级是否点赞
|
|
||||||
changeFirstLevelLike(params) {
|
|
||||||
params.isLike = !params.isLike;
|
|
||||||
},
|
|
||||||
|
|
||||||
// 改变二级是否点赞
|
|
||||||
changeSecondLevelLike(params) {
|
|
||||||
params.isLike = !params.isLike;
|
|
||||||
},
|
|
||||||
// 改变一级头像
|
|
||||||
changeFirstAvater(params, imgUrl) {
|
|
||||||
this.data = this.data.map((item) => {
|
|
||||||
console.log("item", item);
|
|
||||||
return {
|
|
||||||
...item,
|
|
||||||
avatar: item.id === params.id ? imgUrl : item.avatar,
|
|
||||||
};
|
|
||||||
});
|
|
||||||
},
|
|
||||||
// 改变二级头像
|
|
||||||
changeSecondAvater(first, second, imgUrl) {
|
|
||||||
this.data = this.data.map((item) => {
|
|
||||||
let secondData = item.recoveryList.map((ctem) => {
|
|
||||||
return {
|
|
||||||
...ctem,
|
|
||||||
avatar: ctem.id === second.id ? imgUrl : ctem.avatar,
|
|
||||||
};
|
|
||||||
});
|
|
||||||
return {
|
|
||||||
...item,
|
|
||||||
recoveryList: secondData,
|
|
||||||
};
|
|
||||||
});
|
|
||||||
},
|
|
||||||
// 改变一级评论图片
|
|
||||||
changeFirstImg(params, imgUrl) {
|
|
||||||
this.data = this.data.map((item) => {
|
|
||||||
console.log("item", item);
|
|
||||||
return {
|
|
||||||
...item,
|
|
||||||
firstImgUrl: item.id === params.id ? imgUrl : item.firstImgUrl,
|
|
||||||
};
|
|
||||||
});
|
|
||||||
},
|
|
||||||
// 改变二级评论图片
|
|
||||||
changeSecondImg(first, second, imgUrl) {
|
|
||||||
this.data = this.data.map((item) => {
|
|
||||||
let secondData = item.recoveryList.map((ctem) => {
|
|
||||||
return {
|
|
||||||
...ctem,
|
|
||||||
secondImgUrl: ctem.id === second.id ? imgUrl : ctem.secondImgUrl,
|
|
||||||
};
|
|
||||||
});
|
|
||||||
return {
|
|
||||||
...item,
|
|
||||||
recoveryList: secondData,
|
|
||||||
};
|
|
||||||
});
|
|
||||||
},
|
|
||||||
},
|
|
||||||
});
|
|
||||||
export default useFormDataStore;
|
|
||||||
@ -1,10 +0,0 @@
|
|||||||
import useThemeStore from "./theme";
|
|
||||||
import useFormDataStore from "./formData";
|
|
||||||
import useUserStore from "./user";
|
|
||||||
export default function useStore() {
|
|
||||||
return {
|
|
||||||
useThemeStore: useThemeStore(),
|
|
||||||
useFormDataStore: useFormDataStore(),
|
|
||||||
useUserStore: useUserStore(),
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@ -1,26 +0,0 @@
|
|||||||
import { useDark, useToggle } from "@vueuse/core";
|
|
||||||
const useThemeStore = defineStore("themeStore", {
|
|
||||||
state: () => {
|
|
||||||
return {
|
|
||||||
currentTheme: "light", //light 白色 drak 深色模式
|
|
||||||
};
|
|
||||||
},
|
|
||||||
persist: {
|
|
||||||
enabled: true,
|
|
||||||
strategies: [{ key: "theme_store", storage: localStorage }],
|
|
||||||
},
|
|
||||||
actions: {
|
|
||||||
changeCurreneTheme() {
|
|
||||||
this.currentTheme = this.currentTheme === "light" ? "dark" : "light";
|
|
||||||
this.transferClass();
|
|
||||||
},
|
|
||||||
transferClass() {
|
|
||||||
if (this.currentTheme === "dark") {
|
|
||||||
document.documentElement.classList.add("dark");
|
|
||||||
} else {
|
|
||||||
document.documentElement.classList.remove("dark");
|
|
||||||
}
|
|
||||||
},
|
|
||||||
},
|
|
||||||
});
|
|
||||||
export default useThemeStore;
|
|
||||||
@ -1,63 +0,0 @@
|
|||||||
import { login } from "@/api/login";
|
|
||||||
const useUserStore = defineStore("userStore", {
|
|
||||||
state: () => {
|
|
||||||
return {
|
|
||||||
isLogin: false, //是否登录
|
|
||||||
token: "", //登录token
|
|
||||||
key: "", //密钥
|
|
||||||
role: [], //用户权限
|
|
||||||
temp: "", //账号
|
|
||||||
other: "", //密码
|
|
||||||
pwd: "",
|
|
||||||
form: {
|
|
||||||
name: "",
|
|
||||||
password: "",
|
|
||||||
captcha: "",
|
|
||||||
},
|
|
||||||
};
|
|
||||||
},
|
|
||||||
persist: {
|
|
||||||
enabled: true,
|
|
||||||
strategies: [
|
|
||||||
{
|
|
||||||
key: "user_store",
|
|
||||||
paths: ["isLogin", "token", "temp", "other"],
|
|
||||||
storage: sessionStorage,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
actions: {
|
|
||||||
// 更改用户权限
|
|
||||||
changeRole() {},
|
|
||||||
// 获取用户信息
|
|
||||||
getUserInfo() {},
|
|
||||||
async submit() {
|
|
||||||
const { name, password, captcha } = this.form;
|
|
||||||
if (!name || !password) {
|
|
||||||
ElMessage.error("账号或密码不能为空");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
// if (!captcha) {
|
|
||||||
// ElMessage.error("验证码不能为空");
|
|
||||||
// return false;
|
|
||||||
// }
|
|
||||||
|
|
||||||
const res = await login({ name, password, captcha });
|
|
||||||
if (res && res.code === 0) {
|
|
||||||
const tk = res?.data?.token || "";
|
|
||||||
this.token = tk;
|
|
||||||
this.isLogin = true;
|
|
||||||
return true;
|
|
||||||
} else {
|
|
||||||
ElMessage.error(res?.message || "登录失败");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
logout() {
|
|
||||||
this.isLogin = false;
|
|
||||||
this.token = "";
|
|
||||||
},
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
export default useUserStore;
|
|
||||||
@ -1,47 +0,0 @@
|
|||||||
blockquote,
|
|
||||||
dl,
|
|
||||||
dd,
|
|
||||||
h1,
|
|
||||||
h2,
|
|
||||||
h3,
|
|
||||||
h4,
|
|
||||||
h5,
|
|
||||||
h6,
|
|
||||||
hr,
|
|
||||||
figure,
|
|
||||||
p,
|
|
||||||
pre {
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
* {
|
|
||||||
font-family: PingFang SC, DFPKingGothicGB-Regular, sans-serif;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1,
|
|
||||||
h2,
|
|
||||||
h3,
|
|
||||||
h4,
|
|
||||||
h5,
|
|
||||||
h6 {
|
|
||||||
font-size: inherit;
|
|
||||||
font-weight: inherit;
|
|
||||||
}
|
|
||||||
ol,
|
|
||||||
ul {
|
|
||||||
list-style: none;
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
img,
|
|
||||||
svg,
|
|
||||||
video,
|
|
||||||
canvas,
|
|
||||||
audio,
|
|
||||||
iframe,
|
|
||||||
embed,
|
|
||||||
object {
|
|
||||||
display: block;
|
|
||||||
vertical-align: middle;
|
|
||||||
}
|
|
||||||
@ -1,85 +0,0 @@
|
|||||||
html,
|
|
||||||
body {
|
|
||||||
// height: 100%;
|
|
||||||
// width: 100%;
|
|
||||||
// background-attachment: fixed;
|
|
||||||
// background-size: cover;
|
|
||||||
// height: 100vh;
|
|
||||||
// background: url(@/assets/page-bg.png) no-repeat center / cover;
|
|
||||||
::-webkit-scrollbar {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
line-height: 0.5 !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
#app {
|
|
||||||
min-height: 100vh;
|
|
||||||
background: #1596fc linear-gradient(179deg, #1596fc 0%, #ffffff 100%);
|
|
||||||
// background: url(@/assets/page-bg.png) no-repeat center / cover;
|
|
||||||
background-size: cover;
|
|
||||||
}
|
|
||||||
|
|
||||||
body {
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
p {
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
img {
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
|
|
||||||
.point {
|
|
||||||
cursor: pointer;
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
text-decoration: underline;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@mixin page-height {
|
|
||||||
height: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.line-1 {
|
|
||||||
overflow: hidden;
|
|
||||||
text-overflow: ellipsis;
|
|
||||||
white-space: nowrap;
|
|
||||||
}
|
|
||||||
|
|
||||||
.el-dialog__body {
|
|
||||||
padding: 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
// .el-card__body {
|
|
||||||
// padding: 20px 0 !important;
|
|
||||||
// }
|
|
||||||
|
|
||||||
.el-dialog__footer {
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.el-pagination {
|
|
||||||
justify-content: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
@mixin shadow {
|
|
||||||
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.12), 0 0 6px rgba(0, 0, 0, 0.04);
|
|
||||||
}
|
|
||||||
|
|
||||||
@mixin shadow-light {
|
|
||||||
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes rotating {
|
|
||||||
0% {
|
|
||||||
transform: rotate(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
100% {
|
|
||||||
transform: rotate(360deg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||