初始化提交

pull/2/head
xiangcongshuai 1 year ago
parent 3d3a972a9c
commit 9486fb6f35

@ -0,0 +1,21 @@
node_modules
.DS_Store
dist
dist-ssr
*.local
.eslintcache
report.html
yarn.lock
npm-debug.log*
.pnpm-error.log*
.pnpm-debug.log
tests/**/coverage/
# Editor directories and files
.idea
*.suo
*.ntvs*
*.njsproj
*.sln
tsconfig.tsbuildinfo

@ -0,0 +1,14 @@
# http://editorconfig.org
root = true
[*]
charset = utf-8
indent_style = space
indent_size = 2
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
[*.md]
insert_final_newline = false
trim_trailing_whitespace = false

@ -0,0 +1,5 @@
# 平台本地运行端口号
VITE_PORT = 8848
# 是否隐藏首页 隐藏 true 不隐藏 false 勿删除VITE_HIDE_HOME只需在.env文件配置
VITE_HIDE_HOME = false

@ -0,0 +1,11 @@
# 平台本地运行端口号
VITE_PORT = 8848
# 开发环境读取配置文件路径
VITE_PUBLIC_PATH = ./
# 开发环境路由历史模式Hash模式传"hash"、HTML5模式传"h5"、Hash模式带base参数传"hash,base参数"、HTML5模式带base参数传"h5,base参数"
VITE_ROUTER_HISTORY = "hash"
# 开发环境后端地址
VITE_APP_BASE_URL = 'http://192.168.10.13:8000'

@ -0,0 +1,13 @@
# 线上环境平台打包路径
VITE_PUBLIC_PATH = ./
# 线上环境路由历史模式Hash模式传"hash"、HTML5模式传"h5"、Hash模式带base参数传"hash,base参数"、HTML5模式带base参数传"h5,base参数"
VITE_ROUTER_HISTORY = "hash"
# 是否在打包时使用cdn替换本地库 替换 true 不替换 false
VITE_CDN = false
# 是否启用gzip压缩或brotli压缩分两种情况删除原始文件和不删除原始文件
# 压缩时不删除原始文件的配置gzip、brotli、both同时开启 gzip 与 brotli 压缩、none不开启压缩默认
# 压缩时删除原始文件的配置gzip-clear、brotli-clear、both-clear同时开启 gzip 与 brotli 压缩、none不开启压缩默认
VITE_COMPRESSION = "none"

@ -0,0 +1,16 @@
# 预发布也需要生产环境的行为
# https://cn.vitejs.dev/guide/env-and-mode.html#modes
# NODE_ENV = development
VITE_PUBLIC_PATH = ./
# 预发布环境路由历史模式Hash模式传"hash"、HTML5模式传"h5"、Hash模式带base参数传"hash,base参数"、HTML5模式带base参数传"h5,base参数"
VITE_ROUTER_HISTORY = "hash"
# 是否在打包时使用cdn替换本地库 替换 true 不替换 false
VITE_CDN = true
# 是否启用gzip压缩或brotli压缩分两种情况删除原始文件和不删除原始文件
# 压缩时不删除原始文件的配置gzip、brotli、both同时开启 gzip 与 brotli 压缩、none不开启压缩默认
# 压缩时删除原始文件的配置gzip-clear、brotli-clear、both-clear同时开启 gzip 与 brotli 压缩、none不开启压缩默认
VITE_COMPRESSION = "none"

@ -0,0 +1,11 @@
public
dist
*.d.ts
/src/assets
package.json
.eslintrc.js
.prettierrc.js
commitlint.config.js
postcss.config.js
tailwind.config.js
stylelint.config.js

@ -0,0 +1,121 @@
module.exports = {
root: true,
env: {
node: true
},
globals: {
// Ref sugar (take 2)
$: "readonly",
$$: "readonly",
$ref: "readonly",
$shallowRef: "readonly",
$computed: "readonly",
// index.d.ts
// global.d.ts
Fn: "readonly",
PromiseFn: "readonly",
RefType: "readonly",
LabelValueOptions: "readonly",
EmitType: "readonly",
TargetContext: "readonly",
ComponentElRef: "readonly",
ComponentRef: "readonly",
ElRef: "readonly",
global: "readonly",
ForDataType: "readonly",
ComponentRoutes: "readonly",
// script setup
defineProps: "readonly",
defineEmits: "readonly",
defineExpose: "readonly",
withDefaults: "readonly",
DC: false
},
extends: [
"plugin:vue/vue3-essential",
"eslint:recommended",
"@vue/typescript/recommended",
"@vue/prettier",
"@vue/eslint-config-typescript"
],
parser: "vue-eslint-parser",
parserOptions: {
parser: "@typescript-eslint/parser",
ecmaVersion: 2020,
sourceType: "module",
jsxPragma: "React",
ecmaFeatures: {
jsx: true
}
},
overrides: [
{
files: ["*.ts", "*.vue"],
rules: {
"no-undef": "off"
}
},
{
files: ["*.vue"],
parser: "vue-eslint-parser",
parserOptions: {
parser: "@typescript-eslint/parser",
extraFileExtensions: [".vue"],
ecmaVersion: "latest",
ecmaFeatures: {
jsx: true
}
},
rules: {
"no-undef": "off"
}
}
],
rules: {
"vue/no-v-html": "off",
"vue/require-default-prop": "off",
"vue/require-explicit-emits": "off",
"vue/multi-word-component-names": "off",
"@typescript-eslint/no-explicit-any": "off", // any
"no-debugger": "off",
"@typescript-eslint/explicit-module-boundary-types": "off", // setup()
"@typescript-eslint/ban-types": "off",
"@typescript-eslint/ban-ts-comment": "off",
"@typescript-eslint/no-empty-function": "off",
"@typescript-eslint/no-non-null-assertion": "off",
"vue/html-self-closing": [
"error",
{
html: {
void: "always",
normal: "always",
component: "always"
},
svg: "always",
math: "always"
}
],
"@typescript-eslint/no-unused-vars": [
"error",
{
argsIgnorePattern: "^_",
varsIgnorePattern: "^_"
}
],
"no-unused-vars": [
"error",
{
argsIgnorePattern: "^_",
varsIgnorePattern: "^_"
}
],
"prettier/prettier": [
"error",
{
endOfLine: "auto"
}
]
}
};

21
.gitignore vendored

@ -0,0 +1,21 @@
node_modules
.DS_Store
dist
dist-ssr
*.local
.eslintcache
report.html
yarn.lock
npm-debug.log*
.pnpm-error.log*
.pnpm-debug.log
tests/**/coverage/
# Editor directories and files
.idea
*.suo
*.ntvs*
*.njsproj
*.sln
tsconfig.tsbuildinfo

@ -0,0 +1,6 @@
#!/bin/sh
# shellcheck source=./_/husky.sh
. "$(dirname "$0")/_/husky.sh"
npx --no-install commitlint --edit "$1"

@ -0,0 +1,9 @@
#!/bin/sh
command_exists () {
command -v "$1" >/dev/null 2>&1
}
# Workaround for Windows 10, Git Bash and Pnpm
if command_exists winpty && test -t 1; then
exec < /dev/tty
fi

@ -0,0 +1,8 @@
module.exports = {
"*.{js,jsx,ts,tsx}": ["eslint --fix", "prettier --write"],
"{!(package)*.json}": ["prettier --write--parser json"],
"package.json": ["prettier --write"],
"*.vue": ["eslint --fix", "prettier --write", "stylelint --fix"],
"*.{vue,css,scss,postcss,less}": ["stylelint --fix", "prettier --write"],
"*.md": ["prettier --write"]
};

@ -0,0 +1,10 @@
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
. "$(dirname "$0")/common.sh"
[ -n "$CI" ] && exit 0
# Format and submit code according to lintstagedrc.js configuration
npm run lint:lint-staged
npm run lint:pretty

@ -0,0 +1,11 @@
{
"default": true,
"MD003": false,
"MD033": false,
"MD013": false,
"MD001": false,
"MD025": false,
"MD024": false,
"MD007": { "indent": 4 },
"no-hard-tabs": false
}

@ -0,0 +1,3 @@
shamefully-hoist=true
strict-peer-dependencies=false
shell-emulator=true

@ -0,0 +1,6 @@
module.exports = {
bracketSpacing: true,
singleQuote: false,
arrowParens: "avoid",
trailingComma: "none"
};

@ -0,0 +1,4 @@
/dist/*
/public/*
public/*
src/style/reset.scss

@ -0,0 +1,18 @@
{
"recommendations": [
"christian-kohler.path-intellisense",
"vscode-icons-team.vscode-icons",
"davidanson.vscode-markdownlint",
"ms-azuretools.vscode-docker",
"stylelint.vscode-stylelint",
"bradlc.vscode-tailwindcss",
"dbaeumer.vscode-eslint",
"esbenp.prettier-vscode",
"redhat.vscode-yaml",
"csstools.postcss",
"mikestead.dotenv",
"eamodio.gitlens",
"antfu.iconify",
"Vue.volar"
]
}

@ -0,0 +1,31 @@
{
"editor.formatOnType": true,
"editor.formatOnSave": true,
"[vue]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"editor.tabSize": 2,
"editor.formatOnPaste": true,
"editor.guides.bracketPairs": "active",
"files.autoSave": "off",
"git.confirmSync": false,
"workbench.startupEditor": "newUntitledFile",
"editor.suggestSelection": "first",
"editor.acceptSuggestionOnCommitCharacter": false,
"css.lint.propertyIgnoredDueToDisplay": "ignore",
"editor.quickSuggestions": {
"other": true,
"comments": true,
"strings": true
},
"files.associations": {
"editor.snippetSuggestions": "top"
},
"[css]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"editor.codeActionsOnSave": {
"source.fixAll.eslint": true
},
"iconify.excludes": ["el"]
}

@ -0,0 +1,22 @@
{
"Vue3.0快速生成模板": {
"scope": "vue",
"prefix": "Vue3.0",
"body": [
"<template>",
"\t<div>test</div>",
"</template>\n",
"<script lang='ts'>",
"export default {",
"\tsetup() {",
"\t\treturn {}",
"\t}",
"}",
"</script>\n",
"<style lang='scss' scoped>\n",
"</style>",
"$2"
],
"description": "Vue3.0"
}
}

@ -0,0 +1,17 @@
{
"Vue3.2+快速生成模板": {
"scope": "vue",
"prefix": "Vue3.2+",
"body": [
"<script setup lang='ts'>",
"</script>\n",
"<template>",
"\t<div>test</div>",
"</template>\n",
"<style lang='scss' scoped>\n",
"</style>",
"$2"
],
"description": "Vue3.2+"
}
}

@ -0,0 +1,20 @@
{
"Vue3.3+defineOptions快速生成模板": {
"scope": "vue",
"prefix": "Vue3.3+",
"body": [
"<script setup lang='ts'>",
"defineOptions({",
"\tname: ''",
"})",
"</script>\n",
"<template>",
"\t<div>test</div>",
"</template>\n",
"<style lang='scss' scoped>\n",
"</style>",
"$2"
],
"description": "Vue3.3+defineOptions快速生成模板"
}
}

@ -0,0 +1,20 @@
FROM node:16-alpine as build-stage
WORKDIR /app
RUN corepack enable
RUN corepack prepare pnpm@7.32.1 --activate
RUN npm config set registry https://registry.npmmirror.com
COPY .npmrc package.json pnpm-lock.yaml ./
RUN pnpm install --frozen-lockfile
COPY . .
RUN pnpm build
FROM nginx:stable-alpine as production-stage
COPY --from=build-stage /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

@ -0,0 +1,51 @@
import { Plugin as importToCDN } from "vite-plugin-cdn-import";
/**
* @description `cdn`使cdn .env.production VITE_CDN true
* cdnhttps://www.bootcdn.cn当然你也可以选择 https://unpkg.com 或者 https://www.jsdelivr.com
* mockjscdnmockjs使
* 使jscsscdn
*/
export const cdn = importToCDN({
//prodUrl解释 name: 对应下面modules的nameversion: 自动读取本地package.json中dependencies依赖中对应包的版本号path: 对应下面modules的path当然也可写完整路径会替换prodUrl
prodUrl: "https://cdn.bootcdn.net/ajax/libs/{name}/{version}/{path}",
modules: [
{
name: "vue",
var: "Vue",
path: "vue.global.prod.min.js"
},
{
name: "vue-router",
var: "VueRouter",
path: "vue-router.global.min.js"
},
// 项目中没有直接安装vue-demi但是pinia用到了所以需要在引入pinia前引入vue-demihttps://github.com/vuejs/pinia/blob/v2/packages/pinia/package.json#L77
{
name: "vue-demi",
var: "VueDemi",
path: "index.iife.min.js"
},
{
name: "pinia",
var: "Pinia",
path: "pinia.iife.min.js"
},
{
name: "element-plus",
var: "ElementPlus",
path: "index.full.min.js",
css: "index.min.css"
},
{
name: "axios",
var: "axios",
path: "axios.min.js"
},
{
name: "dayjs",
var: "dayjs",
path: "dayjs.min.js"
}
]
});

@ -0,0 +1,63 @@
import type { Plugin } from "vite";
import { isArray } from "@pureadmin/utils";
import compressPlugin from "vite-plugin-compression";
export const configCompressPlugin = (
compress: ViteCompression
): Plugin | Plugin[] => {
if (compress === "none") return null;
const gz = {
// 生成的压缩包后缀
ext: ".gz",
// 体积大于threshold才会被压缩
threshold: 0,
// 默认压缩.js|mjs|json|css|html后缀文件设置成true压缩全部文件
filter: () => true,
// 压缩后是否删除原始文件
deleteOriginFile: false
};
const br = {
ext: ".br",
algorithm: "brotliCompress",
threshold: 0,
filter: () => true,
deleteOriginFile: false
};
const codeList = [
{ k: "gzip", v: gz },
{ k: "brotli", v: br },
{ k: "both", v: [gz, br] }
];
const plugins: Plugin[] = [];
codeList.forEach(item => {
if (compress.includes(item.k)) {
if (compress.includes("clear")) {
if (isArray(item.v)) {
item.v.forEach(vItem => {
plugins.push(
compressPlugin(Object.assign(vItem, { deleteOriginFile: true }))
);
});
} else {
plugins.push(
compressPlugin(Object.assign(item.v, { deleteOriginFile: true }))
);
}
} else {
if (isArray(item.v)) {
item.v.forEach(vItem => {
plugins.push(compressPlugin(vItem));
});
} else {
plugins.push(compressPlugin(item.v));
}
}
}
});
return plugins;
};

@ -0,0 +1,31 @@
/** 处理环境变量 */
const warpperEnv = (envConf: Recordable): ViteEnv => {
/** 此处为默认值 */
const ret: ViteEnv = {
VITE_PORT: 8848,
VITE_PUBLIC_PATH: "",
VITE_ROUTER_HISTORY: "",
VITE_CDN: false,
VITE_HIDE_HOME: "false",
VITE_COMPRESSION: "none"
};
for (const envName of Object.keys(envConf)) {
let realName = envConf[envName].replace(/\\n/g, "\n");
realName =
realName === "true" ? true : realName === "false" ? false : realName;
if (envName === "VITE_PORT") {
realName = Number(realName);
}
ret[envName] = realName;
if (typeof realName === "string") {
process.env[envName] = realName;
} else if (typeof realName === "object") {
process.env[envName] = JSON.stringify(realName);
}
}
return ret;
};
export { warpperEnv };

@ -0,0 +1,45 @@
import type { Plugin } from "vite";
import dayjs, { Dayjs } from "dayjs";
import utils from "@pureadmin/utils";
import duration from "dayjs/plugin/duration";
import { green, blue, bold } from "picocolors";
dayjs.extend(duration);
export function viteBuildInfo(): Plugin {
let config: { command: string };
let startTime: Dayjs;
let endTime: Dayjs;
let outDir: string;
return {
name: "vite:buildInfo",
configResolved(resolvedConfig) {
config = resolvedConfig;
outDir = resolvedConfig.build?.outDir ?? "dist";
},
buildStart() {
console.log(bold(green(`👏欢迎使用${blue("[admin]")}`)));
if (config.command === "build") {
startTime = dayjs(new Date());
}
},
closeBundle() {
if (config.command === "build") {
endTime = dayjs(new Date());
utils.getPackageSize({
folder: outDir,
callback: (size: string) => {
console.log(
bold(
green(
`🎉恭喜打包完成(总用时${dayjs
.duration(endTime.diff(startTime))
.format("mm分ss秒")}${size}`
)
)
);
}
});
}
}
};
}

@ -0,0 +1,32 @@
/**
* `vite.config.ts` `optimizeDeps.include`
* `vite` include esm node_modules/.vite
* includevite 使 node_modules/.vite
* 使 src/main.ts include vite node_modules/.vite
*/
const include = [
"qs",
"mitt",
"dayjs",
"axios",
"pinia",
"js-cookie",
"sortablejs",
"pinyin-pro",
"@vueuse/core",
"@pureadmin/utils",
"responsive-storage"
];
/**
*
* `@iconify-icons/` `exclude` 使
*/
const exclude = [
"@iconify-icons/ep",
"@iconify-icons/ri",
"@pureadmin/theme/dist/browser-utils",
"@iconify-icons/ant-design"
];
export { include, exclude };

@ -0,0 +1,56 @@
import { cdn } from "./cdn";
import vue from "@vitejs/plugin-vue";
import { viteBuildInfo } from "./info";
import svgLoader from "vite-svg-loader";
import vueJsx from "@vitejs/plugin-vue-jsx";
import { viteMockServe } from "vite-plugin-mock";
import { configCompressPlugin } from "./compress";
// import ElementPlus from "unplugin-element-plus/vite";
import { visualizer } from "rollup-plugin-visualizer";
import removeConsole from "vite-plugin-remove-console";
import themePreprocessorPlugin from "@pureadmin/theme";
import { genScssMultipleScopeVars } from "../src/layout/theme";
export function getPluginsList(
command: string,
VITE_CDN: boolean,
VITE_COMPRESSION: ViteCompression
) {
const prodMock = true;
const lifecycle = process.env.npm_lifecycle_event;
return [
vue(),
// jsx、tsx语法支持
vueJsx(),
VITE_CDN ? cdn : null,
configCompressPlugin(VITE_COMPRESSION),
// 线上环境删除console
removeConsole({ external: ["src/assets/iconfont/iconfont.js"] }),
viteBuildInfo(),
// 自定义主题
themePreprocessorPlugin({
scss: {
multipleScopeVars: genScssMultipleScopeVars(),
extract: true
}
}),
// svg组件化支持
svgLoader(),
// ElementPlus({}),
// mock支持
viteMockServe({
mockPath: "mock",
localEnabled: command === "serve",
prodEnabled: command !== "serve" && prodMock,
injectCode: `
import { setupProdMockServer } from './mockProdServer';
setupProdMockServer();
`,
logger: false
}),
// 打包分析
lifecycle === "report"
? visualizer({ open: true, brotliSize: true, filename: "report.html" })
: null
];
}

@ -0,0 +1,32 @@
module.exports = {
ignores: [commit => commit.includes("init")],
extends: ["@commitlint/config-conventional"],
rules: {
"body-leading-blank": [2, "always"],
"footer-leading-blank": [1, "always"],
"header-max-length": [2, "always", 108],
"subject-empty": [2, "never"],
"type-empty": [2, "never"],
"type-enum": [
2,
"always",
[
"feat",
"fix",
"perf",
"style",
"docs",
"test",
"refactor",
"build",
"ci",
"chore",
"revert",
"wip",
"workflow",
"types",
"release"
]
]
}
};

@ -0,0 +1,88 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta name="renderer" content="webkit" />
<meta name="viewport"
content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=0" />
<title>虚拟病人</title>
<link rel="icon" href="/favicon.ico" />
<script>
window.process = {};
</script>
</head>
<body>
<div id="app">
<style>
html,
body,
#app {
position: relative;
display: flex;
align-items: center;
justify-content: center;
width: 100%;
height: 100%;
overflow: hidden;
}
.loader,
.loader::before,
.loader::after {
width: 2.5em;
height: 2.5em;
border-radius: 50%;
animation: load-animation 1.8s infinite ease-in-out;
animation-fill-mode: both;
}
.loader {
position: relative;
top: 0;
margin: 80px auto;
font-size: 10px;
color: #406eeb;
text-indent: -9999em;
transform: translateZ(0);
transform: translate(-50%, 0);
animation-delay: -0.16s;
}
.loader::before,
.loader::after {
position: absolute;
top: 0;
content: "";
}
.loader::before {
left: -3.5em;
animation-delay: -0.32s;
}
.loader::after {
left: 3.5em;
}
@keyframes load-animation {
0%,
80%,
100% {
box-shadow: 0 2.5em 0 -1.3em;
}
40% {
box-shadow: 0 2.5em 0 0;
}
}
</style>
<div class="loader"></div>
</div>
<script type="module" src="/src/main.ts"></script>
</body>
</html>

@ -0,0 +1,190 @@
// 模拟后端动态生成路由
import { MockMethod } from "vite-plugin-mock";
/**
* roles "admin""common"
* admin
* common
*/
// const permissionRouter = {
// path: "/permission",
// meta: {
// title: "用户管理",
// icon: "lollipop",
// rank: 10
// },
// children: [
// {
// path: "/permission/page/index",
// name: "PermissionPage",
// meta: {
// title: "页面权限",
// roles: ["admin", "common"]
// }
// },
// {
// path: "/permission/button/index",
// name: "PermissionButton",
// meta: {
// title: "按钮权限",
// roles: ["admin", "common"],
// auths: ["btn_add", "btn_edit", "btn_delete"]
// }
// }
// ]
// };
// const projectRouter = {
// path: "/project",
// meta: {
// title: "项目管理",
// icon: "lollipop",
// rank: 11
// },
// children: [
// {
// path: "/project/list/index",
// name: "ProjectList",
// meta: {
// title: "项目列表",
// roles: ["admin", "common"]
// }
// },
// {
// path: "/project/details/index",
// name: "ProjectDetails",
// meta: {
// title: "项目详情",
// roles: ["admin", "common"]
// }
// }
// ]
// };
// const modelRouter = {
// path: "/aiModel",
// meta: {
// title: "模型管理",
// icon: "lollipop",
// rank: 12
// },
// children: [
// {
// path: "/aiModel",
// name: "AiModelPage",
// meta: {
// title: "模型管理",
// roles: ["admin", "common"]
// }
// }
// ]
// };
// const deviceRouter = {
// path: "/device",
// meta: {
// title: "设备管理",
// icon: "lollipop",
// rank: 13
// },
// children: [
// {
// path: "/device",
// name: "DevicePage",
// meta: {
// title: "设备管理",
// roles: ["admin", "common"]
// }
// }
// ]
// };
// const warningRouter = {
// path: "/warning",
// meta: {
// title: "告警管理",
// icon: "Alarm",
// rank: 14
// },
// children: [
// {
// path: "/warning/list/index",
// name: "WarningList",
// meta: {
// title: "告警列表",
// roles: ["admin", "common"]
// }
// }
// ]
// };
const enterpriseRouter = {
path: "/enterprise",
meta: {
title: "企业管理",
icon: "buildingOne",
rank: 16
},
children: [
{
path: "/enterprise/index",
name: "EnterpriseList",
meta: {
title: "企业管理",
roles: ["admin"]
}
}
]
};
const myAlgorithmRouter = {
path: "/myAlgorithm",
meta: {
title: "我的算法库",
icon: "terminal",
rank: 17
},
children: [
{
path: "/myAlgorithm/index",
name: "myAlgorithm",
meta: {
title: "我的算法库",
roles: ["admin", "common"]
}
}
]
};
const algorithmTestingRouter = {
path: "/algorithmTesting",
meta: {
title: "算法实测",
icon: "camera",
rank: 18
},
children: [
{
path: "/algorithmTesting/index",
name: "algorithmTesting",
meta: {
title: "算法实测",
roles: ["admin", "common"]
}
}
]
};
export default [
{
url: "/getAsyncRoutes",
method: "get",
response: () => {
return {
success: true,
data: [enterpriseRouter, myAlgorithmRouter, algorithmTestingRouter]
};
}
}
] as MockMethod[];

@ -0,0 +1,66 @@
// 根据角色动态生成路由
import { MockMethod } from "vite-plugin-mock";
export default [
{
url: "/login",
method: "post",
response: ({ body }) => {
if (body.username === "admin" && body.password === "admin123") {
return {
success: true,
data: {
username: "admin",
// 一个用户可能有多个角色
roles: ["admin"],
accessToken: "eyJhbGciOiJIUzUxMiJ9.admin",
refreshToken: "eyJhbGciOiJIUzUxMiJ9.adminRefresh",
expires: "2023/10/30 00:00:00"
}
};
} else if (body.username === "common" && body.password === "common123") {
return {
success: true,
data: {
username: "common",
// 一个用户可能有多个角色
roles: ["common"],
accessToken: "eyJhbGciOiJIUzUxMiJ9.common",
refreshToken: "eyJhbGciOiJIUzUxMiJ9.commonRefresh",
expires: "2023/10/30 00:00:00"
}
};
} else {
return {
success: false,
msg: "用户名密码错误"
};
}
// if (body.username === "admin") {
// return {
// success: true,
// data: {
// username: "admin",
// // 一个用户可能有多个角色
// roles: ["admin"],
// accessToken: "eyJhbGciOiJIUzUxMiJ9.admin",
// refreshToken: "eyJhbGciOiJIUzUxMiJ9.adminRefresh",
// expires: "2023/10/30 00:00:00"
// }
// };
// } else {
// return {
// success: true,
// data: {
// username: "common",
// // 一个用户可能有多个角色
// roles: ["common"],
// accessToken: "eyJhbGciOiJIUzUxMiJ9.common",
// refreshToken: "eyJhbGciOiJIUzUxMiJ9.commonRefresh",
// expires: "2023/10/30 00:00:00"
// }
// };
// }
}
}
] as MockMethod[];

@ -0,0 +1,27 @@
import { MockMethod } from "vite-plugin-mock";
// 模拟刷新token接口
export default [
{
url: "/refreshToken",
method: "post",
response: ({ body }) => {
if (body.refreshToken) {
return {
success: true,
data: {
accessToken: "eyJhbGciOiJIUzUxMiJ9.newAdmin",
refreshToken: "eyJhbGciOiJIUzUxMiJ9.newAdminRefresh",
// `expires`选择这种日期格式是为了方便调试,后端直接设置时间戳或许更方便(每次都应该递增)。如果后端返回的是时间戳格式,前端开发请来到这个目录`src/utils/auth.ts`,把第`38`行的代码换成expires = data.expires即可。
expires: "2023/10/30 23:59:59"
}
};
} else {
return {
success: false,
data: {}
};
}
}
}
] as MockMethod[];

@ -0,0 +1,141 @@
{
"name": "test-project",
"version": "1.0.0",
"private": true,
"scripts": {
"dev": "NODE_OPTIONS=--max-old-space-size=4096 vite",
"serve": "pnpm dev",
"build": "rimraf dist && NODE_OPTIONS=--max-old-space-size=8192 vite build",
"build:staging": "rimraf dist && vite build --mode staging",
"report": "rimraf dist && vite build",
"preview": "vite preview",
"preview:build": "pnpm build && vite preview",
"typecheck": "tsc --noEmit && vue-tsc --noEmit --skipLibCheck",
"svgo": "svgo -f src/assets/svg -o src/assets/svg",
"cloc": "NODE_OPTIONS=--max-old-space-size=4096 cloc . --exclude-dir=node_modules --exclude-lang=YAML",
"clean:cache": "rimraf node_modules && rimraf .eslintcache && pnpm install",
"lint:eslint": "eslint --cache --max-warnings 0 \"{src,mock,build}/**/*.{vue,js,ts,tsx}\" --fix",
"lint:prettier": "prettier --write \"src/**/*.{js,ts,json,tsx,css,scss,vue,html,md}\"",
"lint:stylelint": "stylelint \"**/*.{html,vue,css,scss}\" --fix --cache --cache-location node_modules/.cache/stylelint/",
"lint:lint-staged": "lint-staged -c ./.husky/lintstagedrc.js",
"lint:pretty": "pretty-quick --staged",
"lint": "pnpm lint:eslint && pnpm lint:prettier && pnpm lint:stylelint",
"prepare": "husky install",
"preinstall": "npx only-allow pnpm"
},
"browserslist": [
"> 1%",
"not ie 11",
"not op_mini all"
],
"dependencies": {
"@pureadmin/descriptions": "^1.1.1",
"@pureadmin/table": "^2.3.2",
"@pureadmin/utils": "^1.9.6",
"@vue/composition-api": "^1.7.2",
"@vueuse/core": "^10.2.0",
"@vueuse/motion": "^2.0.0",
"animate.css": "^4.1.1",
"axios": "^1.4.0",
"dayjs": "^1.11.8",
"element-plus": "2.3.6",
"js-audio-recorder": "^1.0.7",
"js-cookie": "^3.0.5",
"lodash.debounce": "^4.0.8",
"mitt": "^3.0.0",
"mockjs": "^1.1.0",
"nprogress": "^0.2.0",
"path": "^0.12.7",
"pinia": "^2.1.4",
"pinyin-pro": "^3.15.2",
"qs": "^6.11.2",
"recorder-js": "^1.0.7",
"recorderx": "^2.0.2",
"responsive-storage": "^2.2.0",
"sortablejs": "^1.15.0",
"uuid": "^9.0.1",
"vue": "^3.3.4",
"vue-router": "^4.2.2",
"vue-types": "^5.1.0",
"vue3-seamless-scroll": "^2.0.1"
},
"devDependencies": {
"@commitlint/cli": "^17.6.6",
"@commitlint/config-conventional": "^17.6.6",
"@iconify-icons/ant-design": "^1.2.7",
"@iconify-icons/ep": "^1.2.12",
"@iconify-icons/icon-park-outline": "^1.2.11",
"@iconify-icons/ri": "^1.2.9",
"@iconify/vue": "^4.1.1",
"@pureadmin/theme": "^3.1.0",
"@types/js-cookie": "^3.0.3",
"@types/mockjs": "^1.0.7",
"@types/node": "^20.3.1",
"@types/nprogress": "0.2.0",
"@types/qs": "^6.9.7",
"@types/sortablejs": "^1.15.1",
"@typescript-eslint/eslint-plugin": "^5.60.0",
"@typescript-eslint/parser": "^5.60.0",
"@vitejs/plugin-vue": "^4.2.3",
"@vitejs/plugin-vue-jsx": "^3.0.1",
"@vue/eslint-config-prettier": "^7.1.0",
"@vue/eslint-config-typescript": "^11.0.3",
"autoprefixer": "^10.4.14",
"cloc": "^2.11.0",
"cssnano": "^6.0.1",
"eslint": "^8.43.0",
"eslint-plugin-prettier": "^4.2.1",
"eslint-plugin-vue": "^9.15.1",
"husky": "^8.0.3",
"lint-staged": "^13.2.2",
"picocolors": "^1.0.0",
"postcss": "^8.4.24",
"postcss-html": "^1.5.0",
"postcss-import": "^15.1.0",
"postcss-scss": "^4.0.6",
"prettier": "^2.8.8",
"pretty-quick": "^3.1.3",
"rimraf": "^5.0.1",
"rollup-plugin-visualizer": "^5.9.2",
"sass": "^1.63.6",
"sass-loader": "^13.3.2",
"stylelint": "^15.9.0",
"stylelint-config-html": "^1.1.0",
"stylelint-config-recess-order": "^4.2.0",
"stylelint-config-recommended": "^12.0.0",
"stylelint-config-recommended-scss": "^12.0.0",
"stylelint-config-recommended-vue": "^1.4.0",
"stylelint-config-standard": "^33.0.0",
"stylelint-config-standard-scss": "^9.0.0",
"stylelint-order": "^6.0.3",
"stylelint-prettier": "^3.0.0",
"stylelint-scss": "^5.0.1",
"svgo": "^3.0.2",
"tailwindcss": "^3.3.2",
"terser": "^5.18.1",
"typescript": "5.0.4",
"vite": "^4.3.9",
"vite-plugin-cdn-import": "^0.3.5",
"vite-plugin-compression": "^0.5.1",
"vite-plugin-mock": "2.9.6",
"vite-plugin-remove-console": "^2.1.1",
"vite-svg-loader": "^4.0.0",
"vue-eslint-parser": "^9.3.1",
"vue-tsc": "^1.8.1"
},
"pnpm": {
"peerDependencyRules": {
"ignoreMissing": [
"rollup",
"webpack",
"core-js"
]
},
"allowedDeprecatedVersions": {
"sourcemap-codec": "*",
"w3c-hr-time": "*",
"stable": "*"
}
},
"license": "MIT"
}

File diff suppressed because it is too large Load Diff

@ -0,0 +1,9 @@
module.exports = {
plugins: {
"postcss-import": {},
"tailwindcss/nesting": {},
tailwindcss: {},
autoprefixer: {},
...(process.env.NODE_ENV === "production" ? { cssnano: {} } : {})
}
};

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

@ -0,0 +1,11 @@
<svg width="30" height="32" viewBox="0 0 30 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M29.262 16.7252L23.5229 11.0259L20.9578 8.47347C20.9217 8.43538 20.8781 8.40503 20.8298 8.38428C20.7815 8.36354 20.7294 8.35284 20.6767 8.35284C20.6241 8.35284 20.572 8.36354 20.5237 8.38428C20.4753 8.40503 20.4318 8.43538 20.3956 8.47347L9.11646 19.6972C9.0244 19.7875 8.90027 19.8382 8.77094 19.8382C8.6416 19.8382 8.51747 19.7875 8.42542 19.6972L6.08291 17.3662C5.99207 17.2746 5.94114 17.151 5.94114 17.0224C5.94114 16.8937 5.99207 16.7701 6.08291 16.6785L15.4529 7.3546C15.5254 7.27699 15.5656 7.17499 15.5656 7.06906C15.5656 6.96313 15.5254 6.86112 15.4529 6.78351L12.9816 4.3826C12.9455 4.3445 12.9019 4.31415 12.8536 4.29341C12.8052 4.27267 12.7531 4.26196 12.7005 4.26196C12.6479 4.26196 12.5958 4.27267 12.5474 4.29341C12.4991 4.31415 12.4555 4.3445 12.4194 4.3826L0.121232 16.6203C0.0829476 16.6562 0.0524462 16.6996 0.0315998 16.7477C0.0107533 16.7958 0 16.8476 0 16.9C0 16.9524 0.0107533 17.0042 0.0315998 17.0523C0.0524462 17.1004 0.0829476 17.1437 0.121232 17.1797L5.83695 22.8906L8.40199 25.4314C8.47999 25.5035 8.5825 25.5435 8.68895 25.5435C8.7954 25.5435 8.89791 25.5035 8.97591 25.4314L20.2551 14.2077C20.2997 14.1633 20.3526 14.1281 20.4109 14.104C20.4692 14.08 20.5317 14.0676 20.5947 14.0676C20.6578 14.0676 20.7203 14.08 20.7786 14.104C20.8369 14.1281 20.8898 14.1633 20.9344 14.2077L23.2769 16.5387C23.3245 16.5813 23.3626 16.6334 23.3887 16.6916C23.4148 16.7499 23.4283 16.8129 23.4283 16.8767C23.4283 16.9404 23.4148 17.0035 23.3887 17.0617C23.3626 17.1199 23.3245 17.172 23.2769 17.2147L11.9977 28.45C11.9234 28.5243 11.8816 28.6249 11.8816 28.7297C11.8816 28.8346 11.9234 28.9352 11.9977 29.0094L14.4339 31.422C14.4701 31.4601 14.5136 31.4904 14.562 31.5112C14.6103 31.5319 14.6624 31.5426 14.715 31.5426C14.7677 31.5426 14.8198 31.5319 14.8681 31.5112C14.9164 31.4904 14.96 31.4601 14.9961 31.422L29.262 17.2962C29.3345 17.2186 29.3747 17.1166 29.3747 17.0107C29.3747 16.9048 29.3345 16.8028 29.262 16.7252Z" fill="url(#paint0_linear_562_16235)"/>
<path d="M17.7134 1.99314L13.86 2.79733C13.839 2.80347 13.8199 2.81483 13.8045 2.83035C13.7892 2.84587 13.778 2.86504 13.7722 2.88603C13.7663 2.90703 13.7659 2.92917 13.771 2.95035C13.7762 2.97154 13.7866 2.99108 13.8015 3.00712L16.8467 6.02574C16.8572 6.04261 16.8719 6.05653 16.8893 6.06618C16.9067 6.07583 16.9263 6.0809 16.9463 6.0809C16.9662 6.0809 16.9858 6.07583 17.0032 6.06618C17.0207 6.05653 17.0353 6.04261 17.0458 6.02574L17.8657 2.19128C17.884 2.16893 17.8942 2.14109 17.8947 2.11226C17.8951 2.08343 17.8858 2.05529 17.8682 2.03238C17.8506 2.00948 17.8257 1.99315 17.7977 1.98603C17.7696 1.97891 17.7399 1.98141 17.7134 1.99314Z" fill="#C50F08"/>
<path d="M19.5056 0.0356277L14.5278 1.35263C14.4812 1.36466 14.4387 1.3889 14.4047 1.42283C14.3707 1.45675 14.3464 1.49912 14.3345 1.54553C14.3225 1.59193 14.3233 1.64068 14.3367 1.6867C14.3501 1.73271 14.3756 1.77431 14.4107 1.80717L18.0533 5.43185C18.0849 5.46742 18.1258 5.49356 18.1715 5.50735C18.2171 5.52115 18.2657 5.52205 18.3119 5.50996C18.358 5.49788 18.3999 5.47328 18.4328 5.43891C18.4657 5.40454 18.4884 5.36175 18.4983 5.3153L19.8921 0.361966C19.9116 0.310297 19.9145 0.253924 19.9005 0.200539C19.8865 0.147153 19.8564 0.0993544 19.8141 0.0636642C19.7718 0.027974 19.7195 0.00612861 19.6643 0.00111125C19.6091 -0.00390611 19.5537 0.00814786 19.5056 0.0356277Z" fill="#FAEC18"/>
<defs>
<linearGradient id="paint0_linear_562_16235" x1="12.2203" y1="25.3498" x2="17.9654" y2="5.36981" gradientUnits="userSpaceOnUse">
<stop stop-color="#3785B7"/>
<stop offset="0.69" stop-color="#2F3E8F"/>
</linearGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 3.6 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 27 KiB

@ -0,0 +1,22 @@
{
"Version": "1.0.0",
"Title": "Admin",
"FixedHeader": true,
"HiddenSideBar": false,
"MultiTagsCache": false,
"KeepAlive": false,
"Layout": "vertical",
"Theme": "default",
"DarkMode": false,
"Grey": false,
"Weak": false,
"HideTabs": true,
"SidebarStatus": true,
"EpThemeColor": "rgba(28, 13, 130)",
"ShowLogo": true,
"ShowModel": "smart",
"MenuArrowIconNoTransition": true,
"CachingAsyncRoutes": false,
"TooltipEffect": "light",
"ResponsiveStorageNameSpace": "responsive-"
}

@ -0,0 +1,25 @@
<template>
<el-config-provider :locale="currentLocale">
<router-view />
<ReDialog />
</el-config-provider>
</template>
<script lang="ts">
import { defineComponent } from "vue";
import { ElConfigProvider } from "element-plus";
import zhCn from "element-plus/lib/locale/lang/zh-cn";
import { ReDialog } from "@/components/ReDialog";
export default defineComponent({
name: "app",
components: {
[ElConfigProvider.name]: ElConfigProvider,
ReDialog
},
computed: {
currentLocale() {
return zhCn;
}
}
});
</script>

@ -0,0 +1,168 @@
import { http } from "@/utils/http";
/** 接收页面的语音消息转文字 */
export const receiveVoiceFile = (data?: object) => {
return http.request(
"post",
"/virtual-patient/ask/receiveVoiceFile",
{ data },
{ headers: { "Content-Type": "multipart/form-data" } }
);
};
//
export const replyVoice = (data?: object) => {
return http.request("get", "/ask/replyVoice", { data });
};
/** 生成诊断流程任务 */
export const creatDiagnosisProcesse = (data?: object) => {
return http.request(
"get",
"/virtual-patient/askProcess/creatDiagnosisProcess",
{ params: data }
);
};
/** 根据病人ID获取病人详细信息 */
export const queryPatientInfo = (data?: object) => {
return http.request("get", "/virtual-patient/askPatient/queryPatientInfo", {
params: data
});
};
/** 使用京东数字人进行对话 */
export const askTalk = (data?: object) => {
return http.request("post", "/virtual-patient/ask/talk", {
data
});
};
/** 查询初步诊断列表 */
export const queryAskPrimaryList = (data?: object) => {
return http.request(
"get",
"/virtual-patient/askPrimary/queryAskPrimaryList",
{
params: data
}
);
};
/** 获取初步诊断可选的下拉列表 */
export const queryPrimaryCanChooseList = () => {
return http.request(
"get",
"/virtual-patient/askPrimary/queryPrimaryCanChooseList"
);
};
/** 删除初步诊断 */
export const deletePrimary = (data?: object) => {
return http.request("get", "/virtual-patient/askPrimary/deletePrimary", {
params: data
});
};
/** 保存初步诊断 */
export const savePrimary = (data?: object) => {
return http.request("post", "/virtual-patient/askPrimary/savePrimary", {
data
});
};
/** 修改初步诊断 */
export const modifyPrimaryDiseaselnfo = (data?: object) => {
return http.request(
"post",
"/virtual-patient/askPrimary/modifyPrimaryDiseaseInfo",
{
data
}
);
};
/** 查询体格检查的工具列表 */
export const queryPhysicalToolList = (data?: object) => {
return http.request(
"get",
"/virtual-patient/askPhysical/queryPhysicalToolList",
{
params: data
}
);
};
/** 查询体格检查的结果(执行体格检查) */
export const queryAskPhysicalResult = (data?: object) => {
return http.request(
"get",
"/virtual-patient/askPhysical/queryAskPhysicalResult",
{
params: data
}
);
};
export const queryAskPhysicalHistory = (data?: object) => {
return http.request(
"get",
"/virtual-patient/askPhysical/queryAskPhysicalHistory",
{
params: data
}
);
};
/** 查询辅助检查项目列表 */
export const queryAncillaryItemList = (data?: object) => {
return http.request(
"get",
"/virtual-patient/askAncillary/queryAncillaryItemList",
{
params: data
}
);
};
/** 进行辅助检查,并获取结果 */
export const queryAskAncillaryResult = (data?: object) => {
return http.request(
"get",
"/virtual-patient/askAncillary/queryAskAncillaryResult",
{
params: data
}
);
};
// 查询辅助检查的历史记录
export const queryAskAncillaryHistory = (data?: object) => {
return http.request(
"get",
"/virtual-patient/askAncillary/queryAskAncillaryHistory",
{
params: data
}
);
};
//结束问诊
export const finishAsk = (data?: object) => {
return http.request("post", "/virtual-patient/askDiagnosisResult/finishAsk", {
data
});
};
//查询最终诊断结果
export const queryDiagnosisResult = (data?: object) => {
return http.request(
"get",
"/virtual-patient/askDiagnosisResult/queryDiagnosisResult",
{
params: data
}
);
};
// 查询问答历史
export const queryHistoryList = (data?: object) => {
return http.request(
"get",
"/virtual-patient/diagnosisQaRecord/queryHistoryList",
{
params: data
}
);
};
export const ping = (data?: object) => {
return http.request("get", "/virtual-patient/heart/ping", {
params: data
});
};

@ -0,0 +1,24 @@
import { http } from "@/utils/http";
type Result = {
success: boolean;
data?: {
/** 列表数据 */
list: Array<any>;
};
};
/** 卡片列表 */
export const getCardList = (data?: object) => {
return http.request<Result>("post", "/getCardList", { data });
};
/** 版本日志 */
export const getReleases = () => {
return http.request<Result>("get", "/releases");
};
/** 平台算法库 */
export const getAlgorithmList = (data?: object) => {
return http.request<Result>("post", "/algorithmList", { data });
};

@ -0,0 +1,10 @@
import { http } from "@/utils/http";
type Result = {
success: boolean;
data: Array<any>;
};
export const getAsyncRoutes = () => {
return http.request<Result>("get", "/getAsyncRoutes");
};

@ -0,0 +1,35 @@
import { http } from "@/utils/http";
export type UserResult = {
success: boolean;
data: {
/** 用户名 */
userAccount: string;
/** `token` */
accessToken: string;
};
};
export type RefreshTokenResult = {
success: boolean;
data: {
/** `token` */
accessToken: string;
/** 用于调用刷新`accessToken`的接口时所需的`token` */
refreshToken: string;
/** `accessToken`的过期时间(格式'xxxx/xx/xx xx:xx:xx' */
expires: Date;
};
};
/** 登录 */
export const getLogin = (data?: object) => {
return http.request<UserResult>("post", "/virtual-patient/user/login", {
data
});
};
/** 刷新token */
export const refreshTokenApi = (data?: object) => {
return http.request<RefreshTokenResult>("post", "/refreshToken", { data });
};

Binary file not shown.

Binary file not shown.

@ -0,0 +1,26 @@
@font-face {
font-family: "iconfont"; /* Project id 2208059 */
src: url("iconfont.woff2?t=1671895108120") format("woff2"),
url("iconfont.woff?t=1671895108120") format("woff"),
url("iconfont.ttf?t=1671895108120") format("truetype");
}
.iconfont {
font-family: "iconfont" !important;
font-size: 16px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.pure-iconfont-tabs:before {
content: "\e63e";
}
.pure-iconfont-logo:before {
content: "\e620";
}
.pure-iconfont-new:before {
content: "\e615";
}

File diff suppressed because one or more lines are too long

@ -0,0 +1,30 @@
{
"id": "2208059",
"name": "pure-admin",
"font_family": "iconfont",
"css_prefix_text": "pure-iconfont-",
"description": "pure-admin-iconfont",
"glyphs": [
{
"icon_id": "20594647",
"name": "Tabs",
"font_class": "tabs",
"unicode": "e63e",
"unicode_decimal": 58942
},
{
"icon_id": "22129506",
"name": "PureLogo",
"font_class": "logo",
"unicode": "e620",
"unicode_decimal": 58912
},
{
"icon_id": "7795615",
"name": "New",
"font_class": "new",
"unicode": "e615",
"unicode_decimal": 58901
}
]
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 182 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

@ -0,0 +1,13 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<g id="huji" clip-path="url(#clip0_219_7540)">
<path id="Vector" d="M0.623047 13.68C0.623047 13.9532 0.811763 14.2236 1.17842 14.476C1.54508 14.7283 2.0825 14.9576 2.76 15.1508C3.43749 15.3439 4.2418 15.4971 5.12699 15.6017C6.01218 15.7062 6.96092 15.76 7.91905 15.76C8.87717 15.76 9.82591 15.7062 10.7111 15.6017C11.5963 15.4971 12.4006 15.3439 13.0781 15.1508C13.7556 14.9576 14.293 14.7283 14.6597 14.476C15.0263 14.2236 15.215 13.9532 15.215 13.68C15.215 13.4069 15.0263 13.1364 14.6597 12.884C14.293 12.6317 13.7556 12.4024 13.0781 12.2092C12.4006 12.0161 11.5963 11.8629 10.7111 11.7583C9.82591 11.6538 8.87717 11.6 7.91905 11.6C6.96092 11.6 6.01218 11.6538 5.12699 11.7583C4.2418 11.8629 3.43749 12.0161 2.76 12.2092C2.0825 12.4024 1.54508 12.6317 1.17842 12.884C0.811763 13.1364 0.623047 13.4069 0.623047 13.68Z" fill="#EEF2FF"/>
<path id="Vector_2" d="M4.48097 3.83999C4.48097 3.83999 1.79297 5.02399 1.79297 5.32799V13.072C1.79297 13.072 2.38497 13.968 3.28097 13.664C4.17697 13.36 6.25697 12.176 6.25697 12.176C6.25697 12.176 12.817 15.152 15.201 9.48799V3.55199C15.201 3.55199 14.305 2.06399 12.817 3.55199C12.817 3.55199 13.409 5.34399 12.513 6.52799C11.633 7.71199 9.24897 10.4 8.96097 10.4C8.65697 10.4 5.39297 7.42399 4.78497 5.63199C4.17697 3.83999 4.78497 3.83999 4.78497 3.83999H4.48097Z" fill="#4287FF"/>
<path id="Vector_3" d="M12.1929 2.49599C11.5689 1.10399 10.2249 0.23999 8.70487 0.23999C7.18487 0.23999 5.84087 1.10399 5.21687 2.49599C4.59286 3.88799 4.83286 5.45599 5.85686 6.60799L8.49687 9.55199C8.54487 9.61599 8.62487 9.64799 8.70487 9.64799C8.78487 9.64799 8.86487 9.61599 8.91287 9.55199L11.5529 6.60799C12.5769 5.47199 12.8169 3.88799 12.1929 2.49599Z" fill="#FFD66D"/>
<path id="Vector_4" d="M8.70338 2.784C7.96738 2.784 7.35938 3.392 7.35938 4.128C7.35938 4.864 7.96738 5.472 8.70338 5.472C9.43938 5.472 10.0474 4.864 10.0474 4.128C10.0474 3.392 9.43938 2.784 8.70338 2.784Z" fill="white"/>
</g>
<defs>
<clipPath id="clip0_219_7540">
<rect width="16" height="16" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

@ -0,0 +1,13 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<g id="nianling" clip-path="url(#clip0_219_7516)">
<path id="Vector" d="M0.271484 13.6C0.271484 14.1856 1.08568 14.7472 2.53496 15.1613C3.98424 15.5754 5.94989 15.808 7.99948 15.808C10.0491 15.808 12.0147 15.5754 13.464 15.1613C14.9133 14.7472 15.7275 14.1856 15.7275 13.6C15.7275 13.0144 14.9133 12.4528 13.464 12.0387C12.0147 11.6246 10.0491 11.392 7.99948 11.392C5.94989 11.392 3.98424 11.6246 2.53496 12.0387C1.08568 12.4528 0.271484 13.0144 0.271484 13.6Z" fill="#EEF2FF"/>
<path id="Vector_2" d="M7.85583 0.191986C7.79183 0.191986 7.72783 0.191986 7.66383 0.207986L7.67983 0.191986H3.42383V4.09599L3.47183 4.06399C3.43983 4.25599 3.42383 4.43199 3.42383 4.63999C3.42383 7.08799 5.40783 9.07199 7.85583 9.07199C10.3038 9.07199 12.2878 7.08799 12.2878 4.63999C12.2878 2.17599 10.3038 0.191986 7.85583 0.191986Z" fill="#FFD66D"/>
<path id="Vector_3" d="M8.86314 3.952C8.30314 3.488 7.50314 3.488 6.95914 3.952L1.23114 8.736H1.11914V12.496C1.11914 13.312 1.79114 13.984 2.60714 13.984H13.0871C13.9031 13.984 14.5751 13.312 14.5751 12.496V9.424C14.5751 8.976 14.3831 8.56 14.0471 8.288L8.86314 3.952Z" fill="#4287FF"/>
<path id="Vector_4" d="M7.35938 11.456V9.05601C7.35938 8.67201 7.66338 8.36801 8.04738 8.36801C8.43138 8.36801 8.73537 8.67201 8.73537 9.05601V11.44C8.73537 11.824 8.43138 12.128 8.04738 12.128C7.66338 12.128 7.35938 11.824 7.35938 11.456Z" fill="white"/>
</g>
<defs>
<clipPath id="clip0_219_7516">
<rect width="16" height="16" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 709 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 905 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

@ -0,0 +1,13 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<g id="zhiye" clip-path="url(#clip0_219_7534)">
<path id="Vector" d="M1.15234 13.712C1.15234 14.2255 1.86371 14.7179 3.12996 15.081C4.3962 15.444 6.1136 15.648 7.90434 15.648C9.69509 15.648 11.4125 15.444 12.6787 15.081C13.945 14.7179 14.6563 14.2255 14.6563 13.712C14.6563 13.1985 13.945 12.7061 12.6787 12.343C11.4125 11.98 9.69509 11.776 7.90434 11.776C6.1136 11.776 4.3962 11.98 3.12996 12.343C1.86371 12.7061 1.15234 13.1985 1.15234 13.712Z" fill="#EEF2FF"/>
<path id="Vector_2" d="M9.9518 4.08H5.5678V1.328H1.4238C0.959797 1.328 0.591797 1.696 0.591797 2.16V9.312C0.591797 11.76 2.5758 13.744 5.0238 13.744H10.7838V4.944C10.7998 4.448 10.4158 4.08 9.9518 4.08Z" fill="#4287FF"/>
<path id="Vector_3" d="M15.4728 13.712H10.8008V7.104H14.9928C15.2648 7.104 15.4728 7.328 15.4728 7.584V13.712Z" fill="#FFD66D"/>
<path id="Vector_4" d="M7.40789 10.704H5.08789V10.272H5.23189C5.35989 10.272 5.48789 10.24 5.58389 10.16C5.67989 10.08 5.72789 9.96799 5.72789 9.83999V7.71199C5.72789 7.43999 5.58389 7.31199 5.27989 7.31199H5.10389V6.87999C5.55189 6.81599 5.98389 6.63999 6.35189 6.35199H6.79989V9.83999C6.79989 9.96799 6.84789 10.08 6.94389 10.16C7.03989 10.24 7.15189 10.272 7.29589 10.272H7.43989V10.704H7.40789Z" fill="white"/>
</g>
<defs>
<clipPath id="clip0_219_7534">
<rect width="16" height="16" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 637 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 190 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

@ -0,0 +1,13 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<g id="hunyin" clip-path="url(#clip0_219_7528)">
<path id="Vector" d="M0.847656 13.952C0.847656 14.4824 1.586 14.9911 2.90025 15.3662C4.21451 15.7413 5.99702 15.952 7.85566 15.952C9.71429 15.952 11.4968 15.7413 12.8111 15.3662C14.1253 14.9911 14.8637 14.4824 14.8637 13.952C14.8637 13.4216 14.1253 12.9129 12.8111 12.5378C11.4968 12.1627 9.71429 11.952 7.85566 11.952C5.99702 11.952 4.21451 12.1627 2.90025 12.5378C1.586 12.9129 0.847656 13.4216 0.847656 13.952Z" fill="#EEF2FF"/>
<path id="Vector_2" d="M10.0644 14.24H2.46438C2.19238 14.24 1.98438 14.032 1.98438 13.76V1.55199C1.98438 1.27999 2.19238 1.07199 2.46438 1.07199H13.2484C13.5204 1.07199 13.7284 1.27999 13.7284 1.55199V10.576C13.7284 12.592 12.0804 14.24 10.0644 14.24Z" fill="#4287FF"/>
<path id="Vector_3" d="M6.28731 7.36001H4.27131C3.95131 7.36001 3.69531 7.10401 3.69531 6.78401C3.69531 6.46401 3.95131 6.20801 4.27131 6.20801H6.27131C6.59131 6.20801 6.84731 6.46401 6.84731 6.78401C6.84731 7.10401 6.59131 7.36001 6.28731 7.36001ZM8.86331 10.224H4.27131C3.95131 10.224 3.69531 9.96801 3.69531 9.64801C3.69531 9.32801 3.95131 9.07201 4.27131 9.07201H8.84731C9.16731 9.07201 9.42331 9.32801 9.42331 9.64801C9.42331 9.96801 9.16731 10.224 8.86331 10.224Z" fill="white"/>
<path id="Vector_4" d="M12.5758 4.784L11.0078 3.648L9.42383 4.784V0.496002H12.5758V4.784Z" fill="#FFD66D"/>
</g>
<defs>
<clipPath id="clip0_219_7528">
<rect width="16" height="16" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 415 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 468 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 446 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 259 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 649 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 139 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 792 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 178 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 654 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 139 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 794 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 179 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

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

Loading…
Cancel
Save