diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..7448a12091e1e8411974ac58aac992870edab3bb
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,54 @@
+FROM node:18.18.2-alpine
+WORKDIR /opt/data_chain_web
+RUN mkdir -p /opt/data_chain_web
+COPY . /opt/data_chain_web
+
+RUN npm install pnpm -g --registry=https://registry.npmmirror.com && \
+ pnpm install --registry=https://registry.npmmirror.com && \
+ pnpm run build
+
+
+FROM openeuler/openeuler:22.03-lts-sp1
+
+ENV TZ Asia/Shanghai
+RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && \
+ echo $TZ > /etc/timezone
+
+RUN sed -i 's|repo.openeuler.org|mirrors.nju.edu.cn/openeuler|g' /etc/yum.repos.d/openEuler.repo && \
+ sed -i '/metalink/d' /etc/yum.repos.d/openEuler.repo && \
+ sed -i '/metadata_expire/d' /etc/yum.repos.d/openEuler.repo && \
+ yum update -y && \
+ yum install -y nginx shadow-utils passwd gettext && \
+ yum clean all && \
+ groupadd -g 1001 eulercopilot && \
+ useradd -m -u 1001 -g eulercopilot -s /sbin/nologin eulercopilot && \
+ passwd -l eulercopilot
+
+COPY --from=0 /opt/data_chain_web/dist /usr/share/nginx/html
+COPY --from=0 /opt/data_chain_web/public /usr/share/nginx/html
+COPY --from=0 /opt/data_chain_web/deploy/prod/nginx.conf.tmpl /home/eulercopilot/nginx.conf.tmpl
+COPY --from=0 /opt/data_chain_web/deploy/prod/start.sh /home/eulercopilot/start.sh
+
+RUN sed -i 's/umask 002/umask 027/g' /etc/bashrc && \
+ sed -i 's/umask 022/umask 027/g' /etc/bashrc && \
+ chown -R eulercopilot:eulercopilot /usr/share/nginx && \
+ chown -R eulercopilot:eulercopilot /var/log/nginx && \
+ chown -R eulercopilot:eulercopilot /var/lib/nginx && \
+ chown -R eulercopilot:eulercopilot /etc/nginx && \
+ chmod -R 750 /var/log/nginx && \
+ find /var/log/nginx -type f -exec chmod 640 {} + && \
+ chmod -R 500 /var/lib/nginx && \
+ chmod -R 500 /usr/share/nginx && \
+ chmod -R 500 /etc/nginx && \
+ find /var/log/nginx -type f -exec chmod 400 {} +
+
+RUN yum remove -y gdb-gdbserver && \
+ sh -c "find /usr /etc \( -name *yum* -o -name *dnf* -o -name *vi* -o -name *sqlite* -o -name *python* \) -exec rm -rf {} + || true" && \
+ sh -c "find /usr /etc \( -name ps -o -name top \) -exec rm -rf {} + || true"
+
+EXPOSE 9888
+
+USER eulercopilot
+WORKDIR /home/eulercopilot
+
+ENTRYPOINT [ "bash", "./start.sh" ]
diff --git a/README.md b/README.md
index 994145439ba216bc0b8af9efa7eebfe7f85d5fce..0ed320c09eb96cca82d1422be289f4b3d17550da 100644
--- a/README.md
+++ b/README.md
@@ -1,37 +1,15 @@
-# euler-copilot-witchaind-web
+## 项目启动
-#### 介绍
-The web frontend of EulerCopilot witChainD.
+```bash
+# 安装 pnpm
+npm install pnpm -g
-#### 软件架构
-软件架构说明
+# 设置镜像源(可忽略)
+pnpm config set registry https://registry.npmmirror.com
+# 安装依赖
+pnpm install
-#### 安装教程
-
-1. xxxx
-2. xxxx
-3. xxxx
-
-#### 使用说明
-
-1. xxxx
-2. xxxx
-3. xxxx
-
-#### 参与贡献
-
-1. Fork 本仓库
-2. 新建 Feat_xxx 分支
-3. 提交代码
-4. 新建 Pull Request
-
-
-#### 特技
-
-1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md
-2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com)
-3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目
-4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目
-5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help)
-6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)
+# 启动运行
+pnpm run dev
+```
\ No newline at end of file
diff --git a/commitlint.config.cjs b/commitlint.config.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..6045ee33bc963156880f38b21c39c2fbf76d274b
--- /dev/null
+++ b/commitlint.config.cjs
@@ -0,0 +1,96 @@
+module.exports = {
+ // 继承的规则
+ extends: ["@commitlint/config-conventional"],
+ // 自定义规则
+ rules: {
+ // @see https://commitlint.js.org/#/reference-rules
+
+ // 提交类型枚举,git提交type必须是以下类型
+ "type-enum": [
+ 2,
+ "always",
+ [
+ "feat", // 新增功能
+ "fix", // 修复缺陷
+ "docs", // 文档变更
+ "style", // 代码格式(不影响功能,例如空格、分号等格式修正)
+ "refactor", // 代码重构(不包括 bug 修复、功能新增)
+ "perf", // 性能优化
+ "test", // 添加疏漏测试或已有测试改动
+ "build", // 构建流程、外部依赖变更(如升级 npm 包、修改 webpack 配置等)
+ "ci", // 修改 CI 配置、脚本
+ "revert", // 回滚 commit
+ "chore", // 对构建过程或辅助工具和库的更改(不影响源文件、测试用例)
+ "wip", // 对构建过程或辅助工具和库的更改(不影响源文件、测试用例)
+ ],
+ ],
+ "subject-case": [0], // subject大小写不做校验
+ },
+
+ prompt: {
+ messages: {
+ type: "选择你要提交的类型 :",
+ scope: "选择一个提交范围(可选):",
+ customScope: "请输入自定义的提交范围 :",
+ subject: "填写简短精炼的变更描述 :\n",
+ body: '填写更加详细的变更描述(可选)。使用 "|" 换行 :\n',
+ breaking: '列举非兼容性重大的变更(可选)。使用 "|" 换行 :\n',
+ footerPrefixesSelect: "选择关联issue前缀(可选):",
+ customFooterPrefix: "输入自定义issue前缀 :",
+ footer: "列举关联issue (可选) 例如: #31, #I3244 :\n",
+ generatingByAI: "正在通过 AI 生成你的提交简短描述...",
+ generatedSelectByAI: "选择一个 AI 生成的简短描述:",
+ confirmCommit: "是否提交或修改commit ?",
+ },
+ // prettier-ignore
+ types: [
+ { value: "feat", name: "特性: ✨ 新增功能", emoji: ":sparkles:" },
+ { value: "fix", name: "修复: 🐛 修复缺陷", emoji: ":bug:" },
+ { value: "docs", name: "文档: 📝 文档变更(更新README文件,或者注释)", emoji: ":memo:" },
+ { value: "style", name: "格式: 🌈 代码格式(空格、格式化、缺失的分号等)", emoji: ":lipstick:" },
+ { value: "refactor", name: "重构: 🔄 代码重构(不修复错误也不添加特性的代码更改)", emoji: ":recycle:" },
+ { value: "perf", name: "性能: 🚀 性能优化", emoji: ":zap:" },
+ { value: "test", name: "测试: 🧪 添加疏漏测试或已有测试改动", emoji: ":white_check_mark:" },
+ { value: "build", name: "构建: 📦️ 构建流程、外部依赖变更(如升级 npm 包、修改 vite 配置等)", emoji: ":package:" },
+ { value: "ci", name: "集成: ⚙️ 修改 CI 配置、脚本", emoji: ":ferris_wheel:" },
+ { value: "revert", name: "回退: ↩️ 回滚 commit", emoji: ":rewind:" },
+ { value: "chore", name: "其他: 🛠️ 对构建过程或辅助工具和库的更改(不影响源文件、测试用例)", emoji: ":hammer:" },
+ { value: "wip", name: "开发中: 🚧 开发阶段临时提交", emoji: ":construction:" },
+ ],
+ useEmoji: true,
+ emojiAlign: "center",
+ useAI: false,
+ aiNumber: 1,
+ themeColorCode: "",
+ scopes: [],
+ allowCustomScopes: true,
+ allowEmptyScopes: true,
+ customScopesAlign: "bottom",
+ customScopesAlias: "custom",
+ emptyScopesAlias: "empty",
+ upperCaseSubject: false,
+ markBreakingChangeMode: false,
+ allowBreakingChanges: ["feat", "fix"],
+ breaklineNumber: 100,
+ breaklineChar: "|",
+ skipQuestions: [],
+ issuePrefixes: [
+ { value: "closed", name: "closed: ISSUES has been processed" },
+ ],
+ customIssuePrefixAlign: "top",
+ emptyIssuePrefixAlias: "skip",
+ customIssuePrefixAlias: "custom",
+ allowCustomIssuePrefix: true,
+ allowEmptyIssuePrefix: true,
+ confirmColorize: true,
+ maxHeaderLength: Infinity,
+ maxSubjectLength: Infinity,
+ minSubjectLength: 0,
+ scopeOverrides: undefined,
+ defaultBody: "",
+ defaultIssues: "",
+ defaultScope: "",
+ defaultSubject: "",
+ },
+};
+
diff --git a/deploy/dev/euler_copilot.conf b/deploy/dev/euler_copilot.conf
new file mode 100644
index 0000000000000000000000000000000000000000..057b8a16f5884f3d9753b5f3d809d44562484bfe
--- /dev/null
+++ b/deploy/dev/euler_copilot.conf
@@ -0,0 +1,78 @@
+server {
+ listen 8080;
+ server_name localhost;
+ charset utf-8;
+
+ add_header X-XSS-Protection "1; mode=block";
+ add_header Referrer-Policy "no-referrer";
+ add_header X-Frame-Options DENY;
+ add_header X-Content-Type-Options nosniff;
+ add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data: base64;";
+ add_header Cache-Control "no-cache,no-store,must-revalidate";
+ add_header Pragma no-cache;
+ add_header Expires 0;
+ client_max_body_size 5G;
+ # limit_conn limitperip 10;
+
+ if ($request_method !~ ^(GET|HEAD|POST|PUT|DELETE)$) {
+ return 444;
+ }
+
+ location ~ /\. {
+ deny all;
+ return 404;
+ }
+
+ location ~ ^(?:(?!/static)).*\.(js|css|ico|png|jpg|eot|svg|ttf|woff|html|txt|pdf)$ {
+ root /usr/share/nginx/html;
+ expires 30d;
+ }
+
+ location / {
+ proxy_set_header X-Real-IP $remote_addr;
+ root /usr/share/nginx/html;
+ try_files $uri $uri/ /index.html;
+ if (!-e $request_filename){
+ rewrite ^(.*)$ /index.html last;
+ }
+ }
+
+ location /api/health_check {
+ deny all;
+ return 404;
+ }
+
+ location /api/ {
+ proxy_set_header X-Real-IP $remote_addr;
+ add_header X-XSS-Protection "1; mode=block";
+ add_header X-Frame-Options DENY;
+ add_header X-Content-Type-Options nosniff;
+ add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data: base64;";
+ add_header Cache-Control "no-cache,no-store,must-revalidate";
+ add_header Pragma no-cache;
+ add_header Expires 0;
+ proxy_buffering off;
+ error_page 404 = @not_found;
+
+ proxy_pass http://192.168.10.31:9988/;
+ }
+
+ location @not_found {
+ root /usr/share/nginx/html;
+ rewrite ^ /404.html break;
+ }
+
+
+ error_page 401 402 403 405 406 407 413 414 /error.html;
+ error_page 404 /404.html;
+ error_page 500 501 502 503 504 505 /error.html;
+
+ location = /404.html {
+ root /usr/share/nginx/html;
+ }
+
+ location = /error.html {
+ root /usr/share/nginx/html;
+ }
+
+ }
diff --git a/deploy/prod/.env.example b/deploy/prod/.env.example
new file mode 100644
index 0000000000000000000000000000000000000000..31983a5bad5cf7c52f3b1ce365056271d2d79f1b
--- /dev/null
+++ b/deploy/prod/.env.example
@@ -0,0 +1 @@
+DATA_CHAIN_BACEND_URL=
\ No newline at end of file
diff --git a/deploy/prod/nginx.conf.tmpl b/deploy/prod/nginx.conf.tmpl
new file mode 100644
index 0000000000000000000000000000000000000000..1c1c077f5e87bd1e9fcfb927addc2969ac1d954b
--- /dev/null
+++ b/deploy/prod/nginx.conf.tmpl
@@ -0,0 +1,137 @@
+worker_processes auto;
+worker_rlimit_nofile 4096;
+error_log ${ERROR_FILE} info;
+pid ${PID_FILE};
+
+include /usr/share/nginx/modules/*.conf;
+
+events {
+ use epoll;
+ worker_connections 1024;
+}
+
+http {
+ log_format main '$remote_addr - $remote_user [$time_local] "$request" '
+ '$status $body_bytes_sent "$http_referer" '
+ '"$http_user_agent" "$http_x_forwarded_for"';
+
+ access_log ${LOG_FILE} main;
+
+ autoindex off;
+ server_tokens off;
+
+ port_in_redirect off;
+ absolute_redirect off;
+
+ client_header_buffer_size 1k;
+ large_client_header_buffers 4 8k;
+ client_body_buffer_size 5120M;
+ client_max_body_size 5120M;
+
+ client_header_timeout 15s;
+ client_body_timeout 15s;
+ client_body_in_file_only off;
+
+ keepalive_timeout 500s;
+ send_timeout 25s;
+
+ limit_conn_zone $binary_remote_addr zone=limitperip:10m;
+ limit_req_zone $binary_remote_addr zone=ratelimit:10m rate=1000r/s;
+
+ proxy_hide_header X-Powered-By;
+ proxy_request_buffering off;
+
+ sendfile on;
+ tcp_nopush on;
+ tcp_nodelay on;
+ types_hash_max_size 4096;
+
+ include /etc/nginx/mime.types;
+ default_type application/octet-stream;
+
+ gzip on;
+ gzip_min_length 1k;
+ gzip_buffers 4 16k;
+ gzip_comp_level 5;
+ gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/javascript application/x-httpd-php application/json;
+ gzip_vary on;
+
+ include /etc/nginx/conf.d/*.conf;
+
+ server {
+ listen 9888;
+ server_name localhost;
+ charset utf-8;
+
+ add_header X-XSS-Protection "1; mode=block";
+ add_header Referrer-Policy "no-referrer";
+ add_header X-Frame-Options DENY;
+ add_header X-Content-Type-Options nosniff;
+ add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data: base64;";
+ add_header Cache-Control "no-cache,no-store,must-revalidate";
+ add_header Pragma no-cache;
+ add_header Expires 0;
+ # limit_conn limitperip 10;
+
+ if ($request_method !~ ^(GET|HEAD|POST|PUT|DELETE)$) {
+ return 444;
+ }
+
+ location ~ /\. {
+ deny all;
+ return 404;
+ }
+
+ location ~ ^(?:(?!/static)).*\.(js|css|ico|png|jpg|eot|svg|ttf|woff|html|txt|pdf)$ {
+ root /usr/share/nginx/html;
+ expires 30d;
+ }
+
+ location / {
+ proxy_set_header X-Real-IP $remote_addr;
+ root /usr/share/nginx/html;
+ try_files $uri $uri/ /index.html;
+ if (!-e $request_filename){
+ rewrite ^(.*)$ /index.html last;
+ }
+ }
+
+ location /api/health_check {
+ deny all;
+ return 404;
+ }
+
+ location /api/ {
+ proxy_set_header X-Real-IP $remote_addr;
+ add_header X-XSS-Protection "1; mode=block";
+ add_header X-Frame-Options DENY;
+ add_header X-Content-Type-Options nosniff;
+ add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data: base64;";
+ add_header Cache-Control "no-cache,no-store,must-revalidate";
+ add_header Pragma no-cache;
+ add_header Expires 0;
+ proxy_buffering off;
+ error_page 404 = @not_found;
+
+ proxy_pass ${DATA_CHAIN_BACEND_URL}/;
+ }
+
+ location @not_found {
+ root /usr/share/nginx/html;
+ rewrite ^ /404.html break;
+ }
+
+
+ error_page 401 402 403 405 406 407 413 414 /error.html;
+ error_page 404 /404.html;
+ error_page 500 501 502 503 504 505 /error.html;
+
+ location = /404.html {
+ root /usr/share/nginx/html;
+ }
+
+ location = /error.html {
+ root /usr/share/nginx/html;
+ }
+ }
+}
diff --git a/deploy/prod/start.sh b/deploy/prod/start.sh
new file mode 100644
index 0000000000000000000000000000000000000000..14cdb2362e158792d924e9cabdcff5b9c8bb93eb
--- /dev/null
+++ b/deploy/prod/start.sh
@@ -0,0 +1,53 @@
+#!/bin/bash
+
+export $(cat .env | xargs)
+
+domain_limit="
+ if (\$http_Host !~ ${SERVER_NAME} $) {
+ return 403;
+ }
+"
+
+ssl_settings="
+ ssl_session_tickets off;
+ ssl_session_timeout 5m;
+ ssl_session_cache shared:SSL:10m;
+
+ ssl_certificate /config/server.crt;
+ ssl_certificate_key /config/server.key;
+ ssl_password_file /config/pass.txt;
+ ssl_dhparam /config/dhparam.pem;
+ ssl_ecdh_curve auto;
+ ssl_protocols TLSv1.2;
+ ssl_ciphers \"ECDHE-RSA-AES256-GCM-SHA384\";
+ ssl_prefer_server_ciphers on;
+ ssl_stapling on;
+ ssl_stapling_verify on;
+"
+
+if [[ -v SSL_ENABLE_FLAG ]]; then
+ export SSL_ENABLE=ssl
+ export SSL_SETTINGS=$ssl_settings
+else
+ export SSL_ENABLE=""
+fi
+
+if [[ -v PROD ]]; then
+ export ERROR_FILE="/dev/stderr"
+ export LOG_FILE="/dev/stdout"
+ export PID_FILE="/var/lib/nginx/tmp/nginx.pid"
+else
+ export ERROR_FILE="/var/log/nginx/error.log"
+ export LOG_FILE="/var/log/nginx/access.log"
+ export PID_FILE="/var/log/nginx/nginx.pid"
+fi
+
+if [[ -v DOMAIN_LIMIT_ENABLE_FLAG ]]; then
+ export DOMAIN_LIMIT=$domain_limit
+else
+ export DOMAIN_LIMIT=""
+fi
+
+bash -c "envsubst '\${ERROR_FILE} \${LOG_FILE} \${PID_FILE} \${DATA_CHAIN_BACEND_URL}' < nginx.conf.tmpl > /config/nginx.conf"
+
+nginx -c /config/nginx.conf -g "daemon off;"
\ No newline at end of file
diff --git a/index.html b/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..1d65c6435dd694fc8b9989fb47a9c46717846f86
--- /dev/null
+++ b/index.html
@@ -0,0 +1,52 @@
+
+
+
+
+
+
+ witChainD
+
+
+
+
+
+
+
+
+
diff --git a/lib/opendesign-icons-1.0.3.tgz b/lib/opendesign-icons-1.0.3.tgz
new file mode 100644
index 0000000000000000000000000000000000000000..9e302607c8a5057f203c8407a042d5edf8d859a1
Binary files /dev/null and b/lib/opendesign-icons-1.0.3.tgz differ
diff --git a/lib/opendesign2-2.0.11.tgz b/lib/opendesign2-2.0.11.tgz
new file mode 100644
index 0000000000000000000000000000000000000000..d11dc18e426343687bb9e278be323cb20b058db0
Binary files /dev/null and b/lib/opendesign2-2.0.11.tgz differ
diff --git a/lint-staged.config.cjs b/lint-staged.config.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..6de155ac825735113431b03fb0fd055f1abd032d
--- /dev/null
+++ b/lint-staged.config.cjs
@@ -0,0 +1,13 @@
+module.exports = {
+ "*.{js,jsx,ts,tsx}": ["eslint --fix", "prettier --write"],
+ "{!(package)*.json,*.code-snippets,.!(browserslist)*rc}": [
+ "prettier --write--parser json",
+ ],
+ "package.json": ["prettier --write"],
+ "*.vue": ["eslint --fix", "prettier --write", "stylelint --fix"],
+ "*.{scss,less,styl,html}": [
+ "stylelint --fix --allow-empty-input",
+ "prettier --write ",
+ ],
+ "*.md": ["prettier --write"],
+};
diff --git a/package.json b/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..d027adb16fecd82290ba9cb0ee36ffaf2be38b68
--- /dev/null
+++ b/package.json
@@ -0,0 +1,128 @@
+{
+ "name": "witChainD",
+ "version": "1.0.0",
+ "private": true,
+ "type": "module",
+ "scripts": {
+ "dev": "vite",
+ "build": "vue-tsc --noEmit & vite build",
+ "preview": "vite preview",
+ "build-only": "vite build",
+ "type-check": "vue-tsc --noEmit",
+ "lint:eslint": "eslint --fix --ext .ts,.js,.vue ./src ",
+ "lint:prettier": "prettier --write \"**/*.{js,cjs,ts,json,tsx,css,less,scss,vue,html,md}\"",
+ "lint:stylelint": "stylelint \"**/*.{css,scss,vue}\" --fix",
+ "lint:lint-staged": "lint-staged",
+ "preinstall": "npx only-allow pnpm",
+ "prepare": "husky install",
+ "commit": "git-cz"
+ },
+ "config": {
+ "commitizen": {
+ "path": "node_modules/cz-git"
+ }
+ },
+ "lint-staged": {
+ "*.{js,ts}": [
+ "prettier --write"
+ ],
+ "*.{cjs,json}": [
+ "prettier --write"
+ ],
+ "*.{vue,html}": [
+ "prettier --write"
+ ],
+ "*.{scss,css}": [
+ "prettier --write"
+ ],
+ "*.md": [
+ "prettier --write"
+ ]
+ },
+ "dependencies": {
+ "@computing/opendesign2": "file:lib\\opendesign2-2.0.11.tgz",
+ "@element-plus/icons-vue": "^2.3.1",
+ "@stomp/stompjs": "^7.0.0",
+ "@vueuse/core": "^10.11.1",
+ "@wangeditor/editor": "^5.1.23",
+ "@wangeditor/editor-for-vue": "5.1.10",
+ "animate.css": "^4.1.1",
+ "axios": "^1.7.4",
+ "codemirror": "^5.65.17",
+ "codemirror-editor-vue3": "^2.7.0",
+ "color": "^4.2.3",
+ "echarts": "^5.5.1",
+ "element-plus": "^2.8.0",
+ "exceljs": "^4.4.0",
+ "lodash": "^4.17.21",
+ "lodash-es": "^4.17.21",
+ "nprogress": "^0.2.0",
+ "path-browserify": "^1.0.1",
+ "path-to-regexp": "^6.2.2",
+ "pinia": "^2.2.2",
+ "qs": "^6.13.0",
+ "sortablejs": "^1.15.2",
+ "uuid": "^10.0.0",
+ "vue": "^3.4.38",
+ "vue-i18n": "9.9.1",
+ "vue-router": "^4.4.3",
+ "vue-uuid": "^3.0.0"
+ },
+ "devDependencies": {
+ "@commitlint/cli": "^18.6.1",
+ "@commitlint/config-conventional": "^18.6.3",
+ "@computing/opendesign-icons": "file:lib\\opendesign-icons-1.0.3.tgz",
+ "@computing/opendesign2": "file:lib\\opendesign2-2.0.11.tgz",
+ "@iconify-json/ep": "^1.1.16",
+ "@types/codemirror": "^5.60.15",
+ "@types/color": "^3.0.6",
+ "@types/lodash": "^4.17.7",
+ "@types/node": "^20.14.15",
+ "@types/nprogress": "^0.2.3",
+ "@types/path-browserify": "^1.0.2",
+ "@types/qs": "^6.9.15",
+ "@types/sortablejs": "^1.15.8",
+ "@types/uuid": "^10.0.0",
+ "@typescript-eslint/eslint-plugin": "^7.18.0",
+ "@typescript-eslint/parser": "^7.18.0",
+ "@vitejs/plugin-vue": "^5.1.2",
+ "@vitejs/plugin-vue-jsx": "^3.1.0",
+ "autoprefixer": "^10.4.20",
+ "commitizen": "^4.3.0",
+ "cz-git": "^1.9.4",
+ "eslint": "^8.57.0",
+ "eslint-config-prettier": "^9.1.0",
+ "eslint-plugin-import": "^2.29.1",
+ "eslint-plugin-prettier": "^5.2.1",
+ "eslint-plugin-vue": "^9.27.0",
+ "fast-glob": "^3.3.2",
+ "lint-staged": "^15.2.9",
+ "postcss": "^8.4.41",
+ "postcss-html": "^1.7.0",
+ "postcss-scss": "^4.0.9",
+ "prettier": "^3.3.3",
+ "sass": "^1.77.8",
+ "stylelint": "^16.8.2",
+ "stylelint-config-html": "^1.1.0",
+ "stylelint-config-recess-order": "^4.6.0",
+ "stylelint-config-recommended-scss": "^14.1.0",
+ "stylelint-config-recommended-vue": "^1.5.0",
+ "stylelint-config-standard": "^36.0.1",
+ "terser": "^5.31.6",
+ "typescript": "^5.5.4",
+ "unocss": "^0.58.9",
+ "unplugin-auto-import": "^0.17.8",
+ "unplugin-icons": "^0.18.5",
+ "unplugin-vue-components": "^0.26.0",
+ "vite": "^5.4.1",
+ "vite-plugin-mock-dev-server": "^1.7.1",
+ "vite-plugin-svg-icons": "^2.0.1",
+ "vite-plugin-vue-devtools": "^7.3.8",
+ "vue-tsc": "^2.0.29",
+ "husky": "^8.0.3"
+ },
+ "license": "MIT",
+ "engines": {
+ "node": ">=18.18.2"
+ }
+}
diff --git a/public/euler_copilot_logo.svg b/public/euler_copilot_logo.svg
new file mode 100644
index 0000000000000000000000000000000000000000..2ac4fced1382e233d40e6f566e68bc4570c96dd4
--- /dev/null
+++ b/public/euler_copilot_logo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/favicon.ico b/public/favicon.ico
new file mode 100644
index 0000000000000000000000000000000000000000..8ed8d998756a7a0dedfb37ee153ce305d9f35f10
Binary files /dev/null and b/public/favicon.ico differ
diff --git a/src/App.vue b/src/App.vue
new file mode 100644
index 0000000000000000000000000000000000000000..b276343cfeffeb8bd0a45e2ffa7829a34e3f3d65
--- /dev/null
+++ b/src/App.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
diff --git a/src/api/apiType.ts b/src/api/apiType.ts
new file mode 100644
index 0000000000000000000000000000000000000000..06e5773811ed8338412eb5de46361c95954bf868
--- /dev/null
+++ b/src/api/apiType.ts
@@ -0,0 +1,62 @@
+export interface CreateKbRequest {
+ default_chunk_size: number;
+ default_parser_method: string;
+ description: string;
+ document_type_list: string[];
+ embedding_model: string;
+ name: string;
+ [property: string]: any;
+}
+
+export interface UpdateKbRequest {
+ default_chunk_size: number;
+ default_parser_method: string;
+ description: string;
+ document_type_list: object[];
+ embedding_model: string;
+ id: string;
+ name: string;
+ [property: string]: any;
+}
+
+export interface QueryKbRequest {
+ created_time_order?: string;
+ document_count_order?: string;
+ name?: string;
+ page_number: number;
+ page_size: number;
+ [property: string]: any;
+}
+
+export interface DocListRequest {
+ chunk_size_order?: string;
+ created_time_order?: string;
+ document_type?: string;
+ kb_id: string;
+ name?: string;
+ page_number: number;
+ page_size: number;
+ parse_status?: string;
+ [property: string]: any;
+}
+
+export interface DocRenameRequest {
+ chunk_size: number;
+ document_type: object;
+ id: string;
+ name: string;
+ [property: string]: any;
+}
+
+export interface DocDownload {
+ id: string;
+ name: string;
+}
+
+export interface ChunkRequest {
+ document_id: string;
+ page_number: number;
+ page_size: number;
+ text?: string;
+ [property: string]: any;
+}
diff --git a/src/api/auth.ts b/src/api/auth.ts
new file mode 100644
index 0000000000000000000000000000000000000000..124fe2a30082839a0bbcf11072808612512e3347
--- /dev/null
+++ b/src/api/auth.ts
@@ -0,0 +1,48 @@
+import request from "@/utils/request";
+
+class AuthAPI {
+ /** 登录 接口*/
+ static login(data: LoginData) {
+ return request({
+ url: `/user/login`,
+ method: "get",
+ params: data,
+ });
+ }
+
+ /** 注销 接口*/
+ static logout() {
+ return request({
+ url: `/user/logout`,
+ method: "get",
+ });
+ }
+
+ /** 注销 接口*/
+ static userUpdate(data: userUpade) {
+ return request({
+ url: `/user/update`,
+ method: "post",
+ data: data,
+ });
+ }
+}
+
+export default AuthAPI;
+/** 登录请求参数 */
+export interface LoginData {
+ /** 用户名 */
+ account: string;
+ /** 密码 */
+ password: string;
+}
+
+export interface userUpade {
+ account?: string;
+ language?: string;
+ name?: string;
+ passwd?: string;
+ role?: string;
+ status?: string;
+ [property: string]: any;
+}
diff --git a/src/api/kbApp.ts b/src/api/kbApp.ts
new file mode 100644
index 0000000000000000000000000000000000000000..22c5112bb2eef633c1dbd113b5f1c95c19448285
--- /dev/null
+++ b/src/api/kbApp.ts
@@ -0,0 +1,148 @@
+import request from "@/utils/request";
+import { CreateKbRequest, QueryKbRequest, UpdateKbRequest } from "./apiType";
+import { ModelForm } from "@/components/UserHeaderBar/modelConfig";
+
+class KbAppAPI {
+ /** 获取用户所有知识库*/
+ static getKbLibrary(data: QueryKbRequest) {
+ return request({
+ url: `/kb/list`,
+ method: "post",
+ data: data,
+ });
+ }
+
+ /** 删除用户知识库*/
+ static delKbLibrary(data: { id: string; task_id: string }) {
+ return request({
+ url: `/kb/rm`,
+ method: "post",
+ data: data,
+ });
+ }
+
+ /** 创建用户知识库*/
+ static createKbLibrary(data: CreateKbRequest) {
+ return request({
+ url: `/kb/create`,
+ method: "post",
+ data: data,
+ });
+ }
+
+ /**更新资产库 */
+ static updateKbLibrary(data: UpdateKbRequest) {
+ return request({
+ url: `/kb/update`,
+ method: "post",
+ data: data,
+ });
+ }
+
+ /** 获取导入知识库状态*/
+ static queryKbTaskList(data: {
+ types: any[];
+ page_size: number;
+ page_number: number;
+ }) {
+ return request({
+ url: `/kb/task/list`,
+ method: "post",
+ data: data,
+ });
+ }
+
+ static stopKbTaskList(data: { task_id?: string; types?: any[] }) {
+ return request({
+ url: `/kb/task/rm`,
+ method: "post",
+ data: data,
+ });
+ }
+
+ /**导入资产库 */
+ static importKbLibrary(payload: { data: any }, options: any) {
+ return request({
+ url: `/kb/import`,
+ method: "post",
+ data: payload.data,
+ headers: {
+ "Content-Type": "multipart/form-data",
+ },
+ onUploadProgress(e) {
+ const rate = Math.floor((e.loaded / (e.total as number)) * 100);
+ if (rate < 100) {
+ options.onProgress(rate);
+ }
+ },
+ });
+ }
+
+ /**打包资产库 */
+
+ static savebLibrary(id: string, options: any) {
+ return request({
+ url: `/kb/export`,
+ data: {
+ id,
+ },
+ method: "post",
+ onUploadProgress(e) {
+ const rate = Math.floor((e.loaded / (e.total as number)) * 100);
+ if (rate < 100) {
+ options.onProgress(rate);
+ }
+ },
+ });
+ }
+
+ /**导出资产库 */
+ static exportbLibrary(fileId: string) {
+ return request({
+ url: `/kb/download`,
+ data: {
+ id: fileId,
+ },
+ method: "post",
+ });
+ }
+
+ static queryLanguageList() {
+ return request({
+ url: `/kb/language`,
+ method: "get",
+ });
+ }
+
+ static queryEmbeddingModelList() {
+ return request({
+ url: `/other/embedding_model`,
+ method: "get",
+ });
+ }
+
+ static queryParseMethodList() {
+ return request({
+ url: `/other/parse_method`,
+ method: "get",
+ });
+ }
+
+ /** 是否启用文件*/
+ static addUserModel(data: ModelForm) {
+ return request({
+ url: `/model/update`,
+ method: "post",
+ data: data,
+ });
+ }
+
+ static getdUserModel() {
+ return request({
+ url: `/model/get`,
+ method: "get",
+ });
+ }
+}
+
+export default KbAppAPI;
diff --git a/src/api/kfApp.ts b/src/api/kfApp.ts
new file mode 100644
index 0000000000000000000000000000000000000000..bf0bb9f124cfb493981b56f43971dd6f1e1bdabd
--- /dev/null
+++ b/src/api/kfApp.ts
@@ -0,0 +1,124 @@
+import request from "@/utils/request";
+import {
+ ChunkRequest,
+ DocDownload,
+ DocListRequest,
+ DocRenameRequest,
+} from "./apiType";
+
+class KfAppAPI {
+ /** 获取资产库里的文件*/
+ static getKbLibraryFile(data: DocListRequest) {
+ return request({
+ url: `/doc/list`,
+ method: "post",
+ data: data,
+ });
+ }
+ /** 修改资产库里的文件*/
+ static updateLibraryFile(data: DocRenameRequest) {
+ return request({
+ url: `/doc/update`,
+ method: "post",
+ data: data,
+ });
+ }
+
+ /** 是否启用文件*/
+ static switchLibraryFile(data: { enabled: boolean; id: string }) {
+ return request({
+ url: `/doc/switch`,
+ method: "post",
+ data: data,
+ });
+ }
+
+ /** 是否删除文件*/
+ static delLibraryFile(data: { ids: any[] }) {
+ return request({
+ url: `/doc/rm`,
+ method: "post",
+ data: data,
+ });
+ }
+
+ /** 是否重启/取消文件*/
+ static runLibraryFile(data: { ids: string[]; run: string }) {
+ return request({
+ url: `/doc/run`,
+ method: "post",
+ data: data,
+ });
+ }
+
+ /**导入资产库文档 */
+ static importKbLibraryFile(
+ payload: { data: any; params: any },
+ options: any
+ ) {
+ return request({
+ url: `/doc/upload?kb_id=${payload.params.kb_id}`,
+ method: "post",
+ data: payload.data,
+ headers: {
+ "Content-Type": "multipart/form-data",
+ },
+ onUploadProgress(e) {
+ const rate = Math.floor((e.loaded / (e.total as number)) * 100);
+ if (rate < 100) {
+ options.onProgress(rate);
+ }
+ },
+ });
+ }
+
+ /** 下载文件*/
+ static downloadLibraryFile(data: { ids: string[] }) {
+ return request({
+ url: `/doc/download`,
+ method: "post",
+ data: data,
+ });
+ }
+
+ /** 获取导入知识库状态*/
+ static queryKfTaskList(data: { type: string }) {
+ return request({
+ url: `/doc/task/list`,
+ method: "post",
+ data: data,
+ });
+ }
+
+ static stopKfTaskList(data: { id: string }) {
+ return request({
+ url: `/doc/task/stop`,
+ method: "post",
+ data: data,
+ });
+ }
+
+ /** 查询文档预览内容*/
+ static chunkLibraryFile(data: ChunkRequest) {
+ return request({
+ url: `/chunk/list`,
+ method: "post",
+ data: data,
+ });
+ }
+
+ /** 是否启用文件*/
+ static switchLibraryFileSection(data: {
+ enabled: boolean;
+ ids: string[];
+ document_id: string;
+ }) {
+ return request({
+ url: `/chunk/switch`,
+ method: "post",
+ data: data,
+ });
+ }
+}
+
+export default KfAppAPI;
diff --git a/src/api/login.ts b/src/api/login.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/api/menu.ts b/src/api/menu.ts
new file mode 100644
index 0000000000000000000000000000000000000000..baa6243c52e522d5cc1c91274e7680ef5f3335c9
--- /dev/null
+++ b/src/api/menu.ts
@@ -0,0 +1,51 @@
+import request from "@/utils/request";
+// 菜单基础URL
+const MENU_BASE_URL = "/api/v1/menus";
+
+class MenuAPI {
+ /**
+ * 获取当前用户的路由列表
+ *
+ * 无需传入角色,后端解析token获取角色自行判断是否拥有路由的权限
+ *
+ * @returns 路由列表
+ */
+ static getRoutes() {
+ return request({
+ url: `${MENU_BASE_URL}/routes`,
+ method: "get",
+ });
+ }
+}
+
+export default MenuAPI;
+
+/** RouteVO,路由对象 */
+export interface RouteVO {
+ /** 子路由列表 */
+ children: RouteVO[];
+ /** 组件路径 */
+ component?: string;
+ /** 路由属性 */
+ meta?: Meta;
+ /** 路由名称 */
+ name?: string;
+ /** 路由路径 */
+ path?: string;
+ /** 跳转链接 */
+ redirect?: string;
+}
+
+/** Meta,路由属性 */
+export interface Meta {
+ /** 【目录】只有一个子路由是否始终显示 */
+ alwaysShow?: boolean;
+ /** 是否隐藏(true-是 false-否) */
+ hidden?: boolean;
+ /** ICON */
+ icon?: string;
+ /** 【菜单】是否开启页面缓存 */
+ keepAlive?: boolean;
+ /** 路由title */
+ title?: string;
+}
diff --git a/src/api/user.ts b/src/api/user.ts
new file mode 100644
index 0000000000000000000000000000000000000000..f26c72aa4b1e62690407579d1a774b0dfe68a823
--- /dev/null
+++ b/src/api/user.ts
@@ -0,0 +1,40 @@
+import request from "@/utils/request";
+
+const USER_BASE_URL = "/api/v1/users";
+
+class UserAPI {
+ /**
+ * 获取当前登录用户信息
+ *
+ * @returns 登录用户昵称、头像信息,包括角色和权限
+ */
+ static getInfo() {
+ return request({
+ url: `${USER_BASE_URL}/me`,
+ method: "get",
+ });
+ }
+}
+
+export default UserAPI;
+
+/** 登录用户信息 */
+export interface UserInfo {
+ /** 用户ID */
+ userId?: number;
+
+ /** 用户名 */
+ username?: string;
+
+ /** 昵称 */
+ nickname?: string;
+
+ /** 头像URL */
+ avatar?: string;
+
+ /** 角色 */
+ roles: string[];
+
+ /** 权限 */
+ perms: string[];
+}
diff --git a/src/assets/base.css b/src/assets/base.css
new file mode 100644
index 0000000000000000000000000000000000000000..5750a71a5af048c27eb5459a7cecc6803334cced
--- /dev/null
+++ b/src/assets/base.css
@@ -0,0 +1,47 @@
+*,
+*::before,
+*::after {
+ box-sizing: border-box;
+ margin: 0;
+ padding: 0;
+}
+li {
+ list-style-type: none;
+ cursor: pointer;
+}
+textarea {
+ resize: none;
+}
+
+body {
+ /* min-height: 100vh; */
+ transition:
+ color 0.5s,
+ background-color 0.5s;
+ font-family:
+ Inter,
+ -apple-system,
+ BlinkMacSystemFont,
+ "Segoe UI",
+ Roboto,
+ Oxygen,
+ Ubuntu,
+ Cantarell,
+ "Fira Sans",
+ "Droid Sans",
+ "Helvetica Neue",
+ sans-serif;
+ font-size: 15px;
+ text-rendering: optimizeLegibility;
+ background-color: #ebeff6;
+}
+:deep(.dialog) {
+ padding: 0px;
+ height: 50%;
+ display: flex;
+ flex-direction: column;
+}
+
+:deep(.el-dialog){
+ --el-dialog-padding-primary:0px;
+}
\ No newline at end of file
diff --git a/src/assets/fonts/HarmonyOS/HarmonyOS_font.css b/src/assets/fonts/HarmonyOS/HarmonyOS_font.css
new file mode 100644
index 0000000000000000000000000000000000000000..1812ff0801474d1c2d17c1395b3bfd19dfdda402
--- /dev/null
+++ b/src/assets/fonts/HarmonyOS/HarmonyOS_font.css
@@ -0,0 +1,121 @@
+/*
+ 100 Thin (Hairline)
+ 200 Extra Light (Ultra Light)
+ 300 Light
+ 400 Normal
+ 500 Medium
+ 600 Semi Bold (Demi Bold)
+ 700 Bold
+ 800 Extra Bold (Ultra Bold)
+ 900 Black (Heavy)
+*/
+
+/* 鸿蒙中文 */
+@font-face {
+ font-family: "HarmonyOS Sans SC Thin";
+ src:
+ url(./HarmonyOS_Sans_SC/HarmonyOS_Sans_SC_Thin.woff2) format("woff2"),
+ url(./HarmonyOS_Sans_SC/HarmonyOS_Sans_SC_Thin.woff) format("woff");
+ font-weight: 100;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: "HarmonyOS Sans SC Light";
+ src:
+ url(./HarmonyOS_Sans_SC/HarmonyOS_Sans_SC_Light.woff2) format("woff2"),
+ url(./HarmonyOS_Sans_SC/HarmonyOS_Sans_SC_Light.woff) format("woff");
+ font-weight: 300;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: "HarmonyOS Sans SC Regular";
+ src:
+ url(./HarmonyOS_Sans_SC/HarmonyOS_Sans_SC_Regular.woff2) format("woff2"),
+ url(./HarmonyOS_Sans_SC/HarmonyOS_Sans_SC_Regular.woff) format("woff");
+ font-weight: 400;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: "HarmonyOS Sans SC Medium";
+ src:
+ url(./HarmonyOS_Sans_SC/HarmonyOS_Sans_SC_Medium.woff2) format("woff2"),
+ url(./HarmonyOS_Sans_SC/HarmonyOS_Sans_SC_Medium.woff) format("woff");
+ font-weight: 500;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: "HarmonyOS Sans SC Bold";
+ src:
+ url(./HarmonyOS_Sans_SC/HarmonyOS_Sans_SC_Bold.woff2) format("woff2"),
+ url(./HarmonyOS_Sans_SC/HarmonyOS_Sans_SC_Bold.woff) format("woff");
+ font-weight: 700;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: "HarmonyOS Sans SC Black";
+ src:
+ url(./HarmonyOS_Sans_SC/HarmonyOS_Sans_SC_Black.woff2) format("woff2"),
+ url(./HarmonyOS_Sans_SC/HarmonyOS_Sans_SC_Black.woff) format("woff");
+ font-weight: 900;
+ font-style: normal;
+}
+
+/* 鸿蒙西文字体 */
+@font-face {
+ font-family: "HarmonyOS Sans En Thin";
+ src:
+ url(./HarmonyOS_Sans/HarmonyOS_Sans_Thin.woff2) format("woff2"),
+ url(./HarmonyOS_Sans/HarmonyOS_Sans_Thin.woff) format("woff");
+ font-weight: 100;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: "HarmonyOS Sans En Light";
+ src:
+ url(./HarmonyOS_Sans/HarmonyOS_Sans_Light.woff2) format("woff2"),
+ url(./HarmonyOS_Sans/HarmonyOS_Sans_Light.woff) format("woff");
+ font-weight: 300;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: "HarmonyOS Sans En Regular";
+ src:
+ url(./HarmonyOS_Sans/HarmonyOS_Sans_Regular.woff2) format("woff2"),
+ url(./HarmonyOS_Sans/HarmonyOS_Sans_Regular.woff) format("woff");
+ font-weight: 400;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: "HarmonyOS Sans En Medium";
+ src:
+ url(./HarmonyOS_Sans/HarmonyOS_Sans_Medium.woff2) format("woff2"),
+ url(./HarmonyOS_Sans/HarmonyOS_Sans_Medium.woff) format("woff");
+ font-weight: 500;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: "HarmonyOS Sans En Bold";
+ src:
+ url(./HarmonyOS_Sans/HarmonyOS_Sans_Bold.woff2) format("woff2"),
+ url(./HarmonyOS_Sans/HarmonyOS_Sans_Bold.woff) format("woff");
+ font-weight: 700;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: "HarmonyOS Sans En Black";
+ src:
+ url(./HarmonyOS_Sans/HarmonyOS_Sans_Black.woff2) format("woff2"),
+ url(./HarmonyOS_Sans/HarmonyOS_Sans_Black.woff) format("woff");
+ font-weight: 900;
+ font-style: normal;
+}
diff --git a/src/assets/icons/fileIcon.png b/src/assets/icons/fileIcon.png
new file mode 100644
index 0000000000000000000000000000000000000000..0101e81d6a70387f165e5dee4afe574a1996dcc5
Binary files /dev/null and b/src/assets/icons/fileIcon.png differ
diff --git a/src/assets/icons/taskLoading.png b/src/assets/icons/taskLoading.png
new file mode 100644
index 0000000000000000000000000000000000000000..246938fc748910e389f3570fd8f826325c686a18
Binary files /dev/null and b/src/assets/icons/taskLoading.png differ
diff --git a/src/assets/icons/taskWait.png b/src/assets/icons/taskWait.png
new file mode 100644
index 0000000000000000000000000000000000000000..32df8404c38af3993e28a9e7aa1adb9bebd943a7
Binary files /dev/null and b/src/assets/icons/taskWait.png differ
diff --git a/src/assets/images/401.gif b/src/assets/images/401.gif
new file mode 100644
index 0000000000000000000000000000000000000000..4c930e72a698889a0f5666d8599652c5808cfc70
Binary files /dev/null and b/src/assets/images/401.gif differ
diff --git a/src/assets/images/404.png b/src/assets/images/404.png
new file mode 100644
index 0000000000000000000000000000000000000000..4e098298787749e55a6dc0321642690b882d130e
Binary files /dev/null and b/src/assets/images/404.png differ
diff --git a/src/assets/images/404_cloud.png b/src/assets/images/404_cloud.png
new file mode 100644
index 0000000000000000000000000000000000000000..a81d8daa2c5a025f0137a27d81ed61ce7064039f
Binary files /dev/null and b/src/assets/images/404_cloud.png differ
diff --git a/src/assets/images/file.png b/src/assets/images/file.png
new file mode 100644
index 0000000000000000000000000000000000000000..08dff66d5eb57952eea420b29bf734ac053b98df
Binary files /dev/null and b/src/assets/images/file.png differ
diff --git a/src/assets/images/helpCircle.svg b/src/assets/images/helpCircle.svg
new file mode 100644
index 0000000000000000000000000000000000000000..e4b0717b38ea8dcc15d8192861ca4f375faef305
--- /dev/null
+++ b/src/assets/images/helpCircle.svg
@@ -0,0 +1,16 @@
+
diff --git a/src/assets/images/language-en.svg b/src/assets/images/language-en.svg
new file mode 100644
index 0000000000000000000000000000000000000000..306a6df7be65c77c3d0c4020e44355595955912b
--- /dev/null
+++ b/src/assets/images/language-en.svg
@@ -0,0 +1,12 @@
+
diff --git a/src/assets/images/language-zh.svg b/src/assets/images/language-zh.svg
new file mode 100644
index 0000000000000000000000000000000000000000..6e7b694b76715c439487d912ef229243a77b9e58
--- /dev/null
+++ b/src/assets/images/language-zh.svg
@@ -0,0 +1,13 @@
+
diff --git a/src/assets/images/login-background-dark.jpg b/src/assets/images/login-background-dark.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..50dc817e8fca2d229f91de8f9ee4a395572ee00a
Binary files /dev/null and b/src/assets/images/login-background-dark.jpg differ
diff --git a/src/assets/images/login-background-light.jpg b/src/assets/images/login-background-light.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..993b958e243926e4dd5b1a415c879965117a3419
Binary files /dev/null and b/src/assets/images/login-background-light.jpg differ
diff --git a/src/assets/images/login-background-light.png b/src/assets/images/login-background-light.png
new file mode 100644
index 0000000000000000000000000000000000000000..bbdbc96190782177734971a1c411ef627382cecb
Binary files /dev/null and b/src/assets/images/login-background-light.png differ
diff --git a/src/assets/images/timer.png b/src/assets/images/timer.png
new file mode 100644
index 0000000000000000000000000000000000000000..a7e7b35c0dd2b798dfe86f26f33746c20f34b066
Binary files /dev/null and b/src/assets/images/timer.png differ
diff --git a/src/assets/images/userHeader.jpeg b/src/assets/images/userHeader.jpeg
new file mode 100644
index 0000000000000000000000000000000000000000..ac2045019ee4e224f1f595a86f2327be6a8d98ac
Binary files /dev/null and b/src/assets/images/userHeader.jpeg differ
diff --git a/src/assets/logo.png b/src/assets/logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..ffa62f3c600e6bc07573320d20c6db8557a1071f
Binary files /dev/null and b/src/assets/logo.png differ
diff --git a/src/assets/svg/alarm.svg b/src/assets/svg/alarm.svg
new file mode 100644
index 0000000000000000000000000000000000000000..df7271a06290438787905774d58bed1b27551e5b
--- /dev/null
+++ b/src/assets/svg/alarm.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/svg/euler_copilot_logo.svg b/src/assets/svg/euler_copilot_logo.svg
new file mode 100644
index 0000000000000000000000000000000000000000..2ac4fced1382e233d40e6f566e68bc4570c96dd4
--- /dev/null
+++ b/src/assets/svg/euler_copilot_logo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/svg/login.jpg b/src/assets/svg/login.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..50dc817e8fca2d229f91de8f9ee4a395572ee00a
Binary files /dev/null and b/src/assets/svg/login.jpg differ
diff --git a/src/assets/svg/user_icon.png b/src/assets/svg/user_icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..f2a462180ad60b1f34e68b25b5a1436f2e225211
Binary files /dev/null and b/src/assets/svg/user_icon.png differ
diff --git a/src/components/CustomLoading/index.vue b/src/components/CustomLoading/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..7eda783595782974f1557209af779bf009325fd6
--- /dev/null
+++ b/src/components/CustomLoading/index.vue
@@ -0,0 +1,34 @@
+
+
+
+
+
+
diff --git a/src/components/HeaderBar/index.vue b/src/components/HeaderBar/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..d372bf797bcecf162ac741f91fb1f643cea9981d
--- /dev/null
+++ b/src/components/HeaderBar/index.vue
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/components/IconSelect/index.vue b/src/components/IconSelect/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..7e3830866bc0ee8d92b82888696953ae7c8eee6f
--- /dev/null
+++ b/src/components/IconSelect/index.vue
@@ -0,0 +1,208 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/KnowledgeForm/index.vue b/src/components/KnowledgeForm/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..7fd781fd2dc6d9fbfb82897709ce373f90ebb21d
--- /dev/null
+++ b/src/components/KnowledgeForm/index.vue
@@ -0,0 +1,497 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t("assetLibrary.embeddedModel") }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t("assetLibrary.fileChunkSize") }}
+
+
+
+
+
+
+
+ (512~1024)
+
+
+
+ {{ $t("btnText.add") }}
+
+
+ {{ $t("btnText.delAll") }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ props.configInfo ? $t("btnText.save") : $t("btnText.confirm") }}
+
+
+ {{ $t("btnText.cancel") }}
+
+
+
+
+
+
diff --git a/src/components/LangSelect/index.vue b/src/components/LangSelect/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..62616292cdc238c46838a8004605685f797ef30a
--- /dev/null
+++ b/src/components/LangSelect/index.vue
@@ -0,0 +1,143 @@
+
+
+
+
+

+

+
+
+ {{ languageText }}
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
diff --git a/src/components/SvgIcon/index.vue b/src/components/SvgIcon/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..07b65e8ddb62f744a0724db7445ed936874731fb
--- /dev/null
+++ b/src/components/SvgIcon/index.vue
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
diff --git a/src/components/TableFilter/index.vue b/src/components/TableFilter/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..504667e0716b2b3fd99abf987bb22ca5b62ca27b
--- /dev/null
+++ b/src/components/TableFilter/index.vue
@@ -0,0 +1,270 @@
+
+
+
+
+ {{ $t("btnText.all") }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t("btnText.confirm") }}
+
+
+ 重置
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/TextMoreTootip/index.vue b/src/components/TextMoreTootip/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..c74fb66498e01b06d9273d2702214621018b9a0c
--- /dev/null
+++ b/src/components/TextMoreTootip/index.vue
@@ -0,0 +1,163 @@
+
+
+
+ {{ value }}
+
+
+
+
+
+
+
diff --git a/src/components/TextSingleTootip/index.vue b/src/components/TextSingleTootip/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..381252c5a8fa6b15df327b59f9ac03ba3b2a6f8a
--- /dev/null
+++ b/src/components/TextSingleTootip/index.vue
@@ -0,0 +1,77 @@
+
+
+
+
+ {{ content || "-" }}
+
+
+
+
+
+
diff --git a/src/components/Upload/index.vue b/src/components/Upload/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..a42e806260ac42cc7eb303ca7695bf4335ad944d
--- /dev/null
+++ b/src/components/Upload/index.vue
@@ -0,0 +1,470 @@
+
+
+
+
+
+
+ {{ $t("btnText.chooseFile") }}
+
+
+ {{ $t("btnText.delete") }}
+
+
+
{{ $t("dialogTipText.continueAdd") }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t("btnText.delete") }}
+
+
+
+
+
+
+
+
+
+
+ {{ $t("dialogTipText.dragDropAdd") }}
+
+
+
+
+
+
+
+
+
+
{{ $t("dialogTipText.dragFile") }}
+
({{ tipText }})
+
+
+ {{ $t("btnText.chooseFile") }}
+
+
+
+
+
+
+
+
+ {{ $t("btnText.confirm") }}
+
+
+ {{ $t("btnText.cancel") }}
+
+
+
+
+
diff --git a/src/components/Upload/uploadProgress.vue b/src/components/Upload/uploadProgress.vue
new file mode 100644
index 0000000000000000000000000000000000000000..1cfec256d47d93b89105637653cd67b9685380cc
--- /dev/null
+++ b/src/components/Upload/uploadProgress.vue
@@ -0,0 +1,197 @@
+
+
+
+
+ {{ $t("assetLibrary.importTaskList") }}
+ {{ `(${taskStatusList.length})` }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ `,${$t("assetLibrary.uploadIng")}...` }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t("uploadText.uploadSuccess") }}
+
+
+
+
+
+ {{ $t("uploadText.uploadFailed") }}
+
+ {{ $t("btnText.retry") }}
+
+
+
+
+
+
+ {{ $t("exportTask.canceled") }}
+
+
+
+
+ {{ $t("btnText.clearAll") }}
+
+
+
+
+
+
diff --git a/src/components/UserHeaderBar/headerCom.vue b/src/components/UserHeaderBar/headerCom.vue
new file mode 100644
index 0000000000000000000000000000000000000000..ec3c54c844d654b897f6f6aa7a703403d50bfc9d
--- /dev/null
+++ b/src/components/UserHeaderBar/headerCom.vue
@@ -0,0 +1,460 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ (1024~8096)
+
+
+
+ {{ $t("btnText.confirm") }}
+
+
+ {{ $t("btnText.cancel") }}
+
+
+
+
+
+
+
+
+
diff --git a/src/components/UserHeaderBar/index.vue b/src/components/UserHeaderBar/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..c06111a85f45accb771cd20705ddd88e7d7ab2db
--- /dev/null
+++ b/src/components/UserHeaderBar/index.vue
@@ -0,0 +1,42 @@
+
+
+
+
+
+
diff --git a/src/components/UserHeaderBar/modelConfig.ts b/src/components/UserHeaderBar/modelConfig.ts
new file mode 100644
index 0000000000000000000000000000000000000000..bb48339417ef872e6a577632c1fa1781720b56c5
--- /dev/null
+++ b/src/components/UserHeaderBar/modelConfig.ts
@@ -0,0 +1,7 @@
+export interface ModelForm {
+ max_tokens?: number;
+ model_name?: string;
+ openai_api_base?: string;
+ openai_api_key?: string;
+ [property: string]: any;
+}
diff --git a/src/enums/CacheEnum.ts b/src/enums/CacheEnum.ts
new file mode 100644
index 0000000000000000000000000000000000000000..f3c434baf8274af96dc344ab3ec8b39dec22039d
--- /dev/null
+++ b/src/enums/CacheEnum.ts
@@ -0,0 +1,4 @@
+/**
+ * 令牌缓存Key
+ */
+export const TOKEN_KEY = "accessToken";
diff --git a/src/enums/FormTypeEnum.ts b/src/enums/FormTypeEnum.ts
new file mode 100644
index 0000000000000000000000000000000000000000..583c33ae27ba0cb1ef18e6b4029ad7f2b47146f4
--- /dev/null
+++ b/src/enums/FormTypeEnum.ts
@@ -0,0 +1,14 @@
+/**
+ * 表单类型枚举
+ */
+export const FormTypeEnum: Record = {
+ INPUT: { value: 1, label: "输入框" },
+ SELECT: { value: 2, label: "下拉框" },
+ RADIO: { value: 3, label: "单选框" },
+ CHECK_BOX: { value: 4, label: "复选框" },
+ INPUT_NUMBER: { value: 5, label: "数字输入框" },
+ SWITCH: { value: 6, label: "开关" },
+ TEXT_AREA: { value: 7, label: "文本域" },
+ DATE: { value: 8, label: "日期框" },
+ DATE_TIME: { value: 9, label: "日期时间框" },
+};
diff --git a/src/enums/KnowledgeEnum.ts b/src/enums/KnowledgeEnum.ts
new file mode 100644
index 0000000000000000000000000000000000000000..b493a8ca0b25e1f1475cf4244e2bc840cc420b22
--- /dev/null
+++ b/src/enums/KnowledgeEnum.ts
@@ -0,0 +1,15 @@
+/**
+ * 状态枚举
+ */
+export const enum StatusEnum {
+ FAIL = "failed",
+ CANCEL = "canceled",
+ ANALYSIS_ING = "pending",
+ SUCCESS = "success",
+ RUNNING = "running",
+}
+
+export const enum MenuType {
+ KL_FILE = "klFile",
+ KL_CONFIG = "klConfig",
+}
diff --git a/src/enums/LanguageEnum.ts b/src/enums/LanguageEnum.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e674c0b165af818d6699de2bb2866c95a584f7a5
--- /dev/null
+++ b/src/enums/LanguageEnum.ts
@@ -0,0 +1,14 @@
+/**
+ * 语言枚举
+ */
+export const enum LanguageEnum {
+ /**
+ * 中文
+ */
+ ZH_CN = "zh",
+
+ /**
+ * 英文
+ */
+ EN = "en",
+}
diff --git a/src/enums/MessageTypeEnum.ts b/src/enums/MessageTypeEnum.ts
new file mode 100644
index 0000000000000000000000000000000000000000..42a6fb946e12dabcaad8e98ce061eb2bcec12f87
--- /dev/null
+++ b/src/enums/MessageTypeEnum.ts
@@ -0,0 +1,15 @@
+/* 消息类型枚举 */
+export const enum MessageTypeEnum {
+ /* 消息 */
+ MESSAGE = "MESSAGE",
+ /* 通知 */
+ NOTICE = "NOTICE",
+ /* 待办 */
+ TODO = "TODO",
+}
+
+export const MessageTypeLabels = {
+ [MessageTypeEnum.MESSAGE]: "消息",
+ [MessageTypeEnum.NOTICE]: "通知",
+ [MessageTypeEnum.TODO]: "待办",
+};
diff --git a/src/enums/QueryTypeEnum.ts b/src/enums/QueryTypeEnum.ts
new file mode 100644
index 0000000000000000000000000000000000000000..253efc0d96b1bb1b575e14cc54f5f656d65738f6
--- /dev/null
+++ b/src/enums/QueryTypeEnum.ts
@@ -0,0 +1,37 @@
+/**
+ * 查询类型枚举
+ */
+export const QueryTypeEnum: Record = {
+ /** 等于 */
+ EQ: { value: 1, label: "=" },
+
+ /** 模糊匹配 */
+ LIKE: { value: 2, label: "LIKE '%s%'" },
+
+ /** 包含 */
+ IN: { value: 3, label: "IN" },
+
+ /** 范围 */
+ BETWEEN: { value: 4, label: "BETWEEN" },
+
+ /** 大于 */
+ GT: { value: 5, label: ">" },
+
+ /** 大于等于 */
+ GE: { value: 6, label: ">=" },
+
+ /** 小于 */
+ LT: { value: 7, label: "<" },
+
+ /** 小于等于 */
+ LE: { value: 8, label: "<=" },
+
+ /** 不等于 */
+ NE: { value: 9, label: "!=" },
+
+ /** 左模糊匹配 */
+ LIKE_LEFT: { value: 10, label: "LIKE '%s'" },
+
+ /** 右模糊匹配 */
+ LIKE_RIGHT: { value: 11, label: "LIKE 's%'" },
+};
diff --git a/src/enums/ResultEnum.ts b/src/enums/ResultEnum.ts
new file mode 100644
index 0000000000000000000000000000000000000000..2f9bc8f857dcfefb5b05aa8f89b0092a421545a2
--- /dev/null
+++ b/src/enums/ResultEnum.ts
@@ -0,0 +1,18 @@
+/**
+ * 响应码枚举
+ */
+export const enum ResultEnum {
+ /**
+ * 成功
+ */
+ SUCCESS = "200",
+ /**
+ * 错误
+ */
+ ERROR = "10003",
+
+ /**
+ * 令牌无效或过期
+ */
+ TOKEN_INVALID = "401",
+}
diff --git a/src/enums/ThemeEnum.ts b/src/enums/ThemeEnum.ts
new file mode 100644
index 0000000000000000000000000000000000000000..91458e1606d582346bfc03389d9a963797dc58f6
--- /dev/null
+++ b/src/enums/ThemeEnum.ts
@@ -0,0 +1,18 @@
+/**
+ * 主题枚举
+ */
+export const enum ThemeEnum {
+ /**
+ * 明亮主题
+ */
+ LIGHT = "light",
+ /**
+ * 暗黑主题
+ */
+ DARK = "dark",
+
+ /**
+ * 系统自动
+ */
+ AUTO = "auto",
+}
diff --git a/src/lang/index.ts b/src/lang/index.ts
new file mode 100644
index 0000000000000000000000000000000000000000..a350571f93b200f527e714a76069a9e20ccb391c
--- /dev/null
+++ b/src/lang/index.ts
@@ -0,0 +1,32 @@
+import type { App } from "vue";
+import { createI18n } from "vue-i18n";
+import { useAppStoreHook } from "@/store/modules/app";
+// 本地语言包
+import enLocale from "./package/en";
+import zhCnLocale from "./package/zh-cn";
+import defaultSettings from "@/settings";
+
+const messages = {
+ zh: {
+ ...zhCnLocale,
+ },
+ en: {
+ ...enLocale,
+ },
+};
+
+const language = useStorage("language", defaultSettings.language);
+
+const i18n = createI18n({
+ legacy: false,
+ locale: language.value,
+ messages: messages,
+ globalInjection: true,
+});
+
+// 全局注册 i18n
+export function setupI18n(app: App) {
+ app.use(i18n);
+}
+
+export default i18n;
diff --git a/src/lang/package/en.ts b/src/lang/package/en.ts
new file mode 100644
index 0000000000000000000000000000000000000000..97b47b8ca3e096c19a5bcce1606193be64c519e7
--- /dev/null
+++ b/src/lang/package/en.ts
@@ -0,0 +1,193 @@
+export default {
+ // 登录页面国际化
+ login: {
+ username: "Username",
+ password: "Password",
+ login: "Log In",
+ logOut: "Log Out",
+ welcomeToUse: "Welcome",
+ loginSuccessful: "Login Successful",
+ message: {
+ username: {
+ usernameMsg: "The username cannot be empty.",
+ required: "Enter a username.",
+ },
+ password: {
+ passwordMsg: "The password cannot be empty.",
+ required: "Enter a password.",
+ },
+ loginTip: "The username or password is not correct.",
+ loginToken: "The session has expired.Please login again.",
+ },
+ },
+ langSelect: {
+ message: {
+ success: "Switch Language Successful!",
+ },
+ },
+ assetLibrary: {
+ assetLibrary: "Asset Libraries",
+ assetId: "Asset ID",
+ welcomeUsePro: "Welcome to witChainD!",
+ profile:
+ "witChainD offers efficient document management and intelligent analysis,supporting a variety of file formats including XML,MD,XLSX,DOCX,DOC,and TXT.Equipped with an advanced document processing technology and powerful retrieval capabilities of the openEulerCopilot System RAG,WitchainD aims to provide you with an exceptional intelligent Q&A service.",
+ message: {
+ name: "Enter an asset libraray name.",
+ libraryNameLen: "The asset library name can contain 1 to 15 characters.",
+ categoryInfo: "Enter a category name.",
+ languagePlace: "Select a language.",
+ modelPlace: "Select a parsing method.",
+ analyticMethodPlace: "Enter a value",
+ pleasePlace: "Enter a value",
+ pleaseChoose: "Select an option",
+ assetEditSuccess: "Asset library information is modified successfully.",
+ },
+ piece: "piece ",
+ file: "documents",
+ name: "Asset Library Name",
+ desc: "Description",
+ language: "Language",
+ embeddedModel: "Embedded Model",
+ analyticMethod: "Parsing Method",
+ fileChunkSize: "File Block Size",
+ configCategory: "Document Categories",
+ fileConfigCategory: "Document Information Categories",
+ supAddCategoris: "A maximum of 10 document categories can be added.",
+ fileNum: "Document Count",
+ uploadTime: "Create Time",
+ importTaskList: "Import Task List",
+ exportTaskList: "Export Task List",
+ uploadIng: "Uploading",
+ uploadFailedNet: "Upload failed.Check the netwok.",
+ fileSuffiexNot: "The file name extension is not supported.",
+ copySuccessFul: "Copy successful",
+ },
+ assetFile: {
+ docName: "Document Name",
+ category: "Category",
+ chunkSize: "Chunk Size",
+ uploadTime: "Upload Time",
+ analyticStatus: "Parsing Status",
+ parsingMethod: "Parsing Method",
+ parsingComTime: "Parsing Completion Time",
+ analyticTip:
+ "The document will be re-parsed after the chunk size is changed.",
+ contentView: "Preview",
+ baseInfo: "Basic Information",
+ message: {
+ name: "Enter an file name.",
+ docNameLen: "The file name can contain 1 to 15 characters",
+ },
+ status: {
+ analyticIng: "Parsing",
+ analyticWaitIng: "Parsing waitIng",
+ analyticFail: "Parsing failed",
+ cancelAnalytic: "Parsing canceled",
+ analyticSucces: "Parsing successful",
+ },
+ open: "Open",
+ close: "Close",
+ },
+ fileChunk: {
+ parag: "Paragraph",
+ table: "table",
+ img: "Image",
+ },
+ model: {
+ pleasePlace: "Enter a value",
+ modelName: "Model",
+ modelConfig: "Configure Model",
+ modelType: "Model",
+ maxToken: "Maximum Token Limit",
+ },
+ btnText: {
+ confirm: "Ok",
+ cancel: "Cancel",
+ operation: "Operation",
+ export: "Export",
+ edit: "Edit",
+ delete: "Delete",
+ retry: "Retry",
+ restart: "Restart",
+ clearAll: "Clear all",
+ homePage: "Home Page",
+ assetDocList: "Documents List",
+ configInfo: "Configure Information",
+ importFile: "Import Document",
+ editAssetLibrary: "Edit Asset Library",
+ createAssetLibrary: "Create Asset Library",
+ batchImport: "Batch Import",
+ batchDown: "Batch Download",
+ download: "Download",
+ downloadAll: "Download All",
+ downloadChoose: "Download Selected",
+ all: "All",
+ chooseFile: "Select File",
+ batch: "Batch",
+ enable: "Enable",
+ close: "Close",
+ save: "Save",
+ add: "Add",
+ delAll: "Delete All",
+ analytic: "Analytic",
+ selectAll: "Select All",
+ },
+ dialogTipText: {
+ importAssetLibrary: "Import Document",
+ tipsText: "Warining",
+ isAddFilr: "Are you sure you want to add the documents?",
+ confirmDelAsset: "Are you sure you want to delete asset?",
+ confirmDelFile: "Are you sure you want to delete file?",
+ confirmDelSelected: "Are you sure you want to delete selected file?",
+ eidtFile: "Edit Document",
+ confirmCancelAnalytic:
+ "Are you sure you want to cancel parsing? After you click Ok,parsing will be canceled.Please proceed with caution.",
+ fileZipFormat:
+ "The file must be in .zip format. A maximum of five asssets with a total size of 5 GB can be uploaded.",
+ fileAllFormat:
+ "The file can be in .md,.xlsx,.pdf,.docx,or .txt format. A maximum of 100 files with a total size of 500 MB can be uploaded.",
+ continueAdd: "You can drag files to the list area below to add more.",
+ dragDropAdd: "Drop files here.",
+ dragFile: "Drop files here.",
+ fileName: "File name",
+ fileSize: "Size",
+ singleFileSize: "The size of a file cannot exceed 20 MB.",
+ },
+ formTipText: {
+ analyticTip:
+ "Vectorization model for transforming document chunks into vectors. Currently,two options are available:bge-large-en-v1.5 for English text and bge-mixed-model for Chinese text.",
+ fileChunkSizeTip:
+ "Chunk size for dividing files after the configuration file is uploaded. The value ranges from 512 to 1024 tokens per chunk. By default, a chunk size of 1024 tokens is used.",
+ },
+ pageTipText: {
+ NoData: "No data available.",
+ systemError: "System error.",
+ Loading: "Loading",
+ },
+ uploadText: {
+ uploadFailed: "Upload failed.",
+ uploadSuccess: "Upload successful.",
+ },
+ exportTask: {
+ export: " export",
+ pendingExport: "Pending export",
+ exportFailed: "Failed",
+ exportSuccess: "Successful",
+ reason: "Reason",
+ downloadTask: "Download Task",
+ canceled: "Canceled",
+ },
+ opsMessage: {
+ opsSuccess: "Operation successful.",
+ opsRestart: "Operation restarted.",
+ opsCancel: "Operation canceled.",
+ delSuccess: "Deletion successful.",
+ opsAnalyticIng: "AnalyticIng",
+ modifSuccess: "Modification successful.",
+ },
+ timerSearch: {
+ lastHour: "Last {timer} hour",
+ },
+ copyright:
+ "Copyright© Huawei Software Technologies Co., Ltd.2024. All rights reserved.",
+};
diff --git a/src/lang/package/zh-cn.ts b/src/lang/package/zh-cn.ts
new file mode 100644
index 0000000000000000000000000000000000000000..2d4a7797d48862b15d043ef909a805433766f5c4
--- /dev/null
+++ b/src/lang/package/zh-cn.ts
@@ -0,0 +1,191 @@
+export default {
+ // 登录页面国际化
+ login: {
+ username: "用户名",
+ password: "密码",
+ login: "登录",
+ logOut: "退出登录",
+ welcomeToUse: "欢迎使用",
+ loginSuccessful: "登录成功",
+ message: {
+ username: {
+ usernameMsg: "用户名不能为空",
+ required: "请输入用户名",
+ },
+ password: {
+ passwordMsg: "密码不能为空",
+ required: "请输入密码",
+ },
+ loginTip: "用户名或密码错误",
+ loginToken: "您的会话已过期,请重新登录",
+ },
+ },
+ langSelect: {
+ message: {
+ success: "切换语言成功",
+ },
+ },
+ assetLibrary: {
+ assetLibrary: "资产库",
+ assetId: "资产ID",
+ welcomeUsePro: "欢迎使用WitChainD!",
+ profile:
+ "witChainD专注于文档的高效管理和智能解析,支持包括XML、MD、XLSX、DOCX、DOC以及TXT在内的多种文件格式。本平台搭载的先进文档处理技术,结合openEuler Copilot System RAG的强大检索功能,旨在为您提供卓越的智能问答服务体验。",
+ message: {
+ name: "请输入资产库名称",
+ libraryNameLen: "资产库名称长度1-15个字符",
+ categoryInfo: "请输入类别名称",
+ languagePlace: "请选择语言",
+ modelPlace: "请选择模型",
+ analyticMethodPlace: "请选择解析方法",
+ pleasePlace: "请输入",
+ pleaseChoose: "请选择",
+ assetEditSuccess: "配置信息修改成功",
+ },
+ piece: "篇",
+ file: "文档",
+ name: "资产库名称",
+ desc: "描述",
+ language: "语言",
+ embeddedModel: "嵌入模型",
+ analyticMethod: "解析方法",
+ fileChunkSize: "文件分块大小",
+ configCategory: "配置类别",
+ fileConfigCategory: "文档信息类别",
+ supAddCategoris: "最多支持添加10个文档信息类别",
+ fileNum: "文档数量",
+ uploadTime: "创建时间",
+ importTaskList: "导入任务列表",
+ exportTaskList: "导出任务列表",
+ uploadIng: "上传中",
+ uploadFailedNet: "上传失败,请检查网络",
+ fileSuffiexNot: "文件后缀不符合要求,请检查文件",
+ copySuccessFul: "复制成功",
+ },
+ assetFile: {
+ docName: "文档名称",
+ category: "类别",
+ chunkSize: "分块大小",
+ uploadTime: "上传时间",
+ analyticStatus: "解析状态",
+ parsingMethod: "解析方法",
+ parsingComTime: "解析完成时间",
+ analyticTip: "修改文件分块大小,文档会自动重新解析",
+ contentView: "内容预览",
+ baseInfo: "基本信息",
+ message: {
+ name: "请输入文档名称",
+ docNameLen: "资产库名称长度1-15个字符",
+ },
+ status: {
+ analyticIng: "解析中",
+ analyticWaitIng: "等待解析",
+ analyticFail: "解析失败",
+ cancelAnalytic: "取消解析",
+ analyticSucces: "解析成功",
+ },
+ open: "开启",
+ close: "关闭",
+ },
+
+ fileChunk: {
+ parag: "段落",
+ table: "表格",
+ img: "图片",
+ },
+ model: {
+ pleasePlace: "请输入",
+ modelName: "模型名称",
+ modelType: "模型类型",
+ modelConfig: "模型配置",
+ maxToken: "最大Token数",
+ },
+ btnText: {
+ confirm: "确定",
+ cancel: "取消",
+ operation: "操作",
+ export: "导出",
+ edit: "编辑",
+ delete: "删除",
+ retry: "重试",
+ restart: "重启",
+ clearAll: "全部清空",
+ homePage: "首页",
+ assetDocList: "文档列表",
+ configInfo: "配置信息",
+ importFile: "导入文档",
+ createAssetLibrary: "新建资产库",
+ editAssetLibrary: "编辑资产库",
+ batchImport: "批量导入",
+ batchDown: "批量下载",
+ download: "下载",
+ downloadAll: "下载全部",
+ downloadChoose: "下载已选",
+ all: "全部",
+ chooseFile: "选择文件",
+ batch: "批量",
+ enable: "启用",
+ close: "关闭",
+ save: "保存",
+ add: "添加",
+ analytic: "解析",
+ delAll: "删除全部",
+ selectAll: "选择全部",
+ },
+ dialogTipText: {
+ importAssetLibrary: "导入资产库",
+ tipsText: "提示",
+ isAddFilr: "是否继续添加文档",
+ confirmDelAsset: "确定删除资产库",
+ confirmDelFile: "确定删除文档",
+ confirmDelSelected: "确定删除选择的文档吗",
+ eidtFile: "文档编辑",
+ confirmCancelAnalytic: "确认取消解析?点击确认后将停止解析,请谨慎操作。",
+ fileZipFormat:
+ "文件支持.zip格式,最多支持上传5个资产库,资产库总大小不超过5GB",
+ fileAllFormat:
+ "文件支持.md,.xlsx,.pdf,.docx,.txt格式,最多支持上传128个文件,文件总大小不超过500MB",
+ continueAdd: "您仍可以通过拖拽文件到下方列表区域进行文件添加",
+ dragDropAdd: "将文件拖到此处即可继续添加",
+ dragFile: "将文件拖到此处",
+ fileName: "文件名",
+ fileSize: "大小",
+ singleFileSize: "单个文件大小不能超过20MB",
+ },
+ formTipText: {
+ analyticTip:
+ "文档分块后,将分块转换为向量的向量化模型类型,先暂支持两种向量化模型bg-large-en-v1.5(面向英文向量化场景)和bge-mixed-model(面向中文向量化场景),默认情况下选择bge-mixed-model模型。",
+ fileChunkSizeTip:
+ "配置文档上传后,将文件处理成片段分块的大小,分块大小范围为512-1024Token/块,默认使用1024Toke/块对文件进行分块。",
+ },
+ pageTipText: {
+ NoData: "暂无数据",
+ systemError: "系统出错",
+ Loading: "加载中",
+ },
+ uploadText: {
+ uploadFailed: "上传失败",
+ uploadSuccess: "上传成功",
+ },
+ exportTask: {
+ export: "导出任务",
+ pendingExport: "待导出",
+ exportFailed: "导出失败",
+ exportSuccess: "导出成功",
+ reason: "失败原因",
+ downloadTask: "下载任务",
+ canceled: "已取消",
+ },
+ opsMessage: {
+ opsSuccess: "操作成功",
+ opsRestart: "重启成功",
+ opsCancel: "取消成功",
+ opsAnalyticIng: "解析中",
+ delSuccess: "删除成功",
+ modifSuccess: "修改成功",
+ },
+ timerSearch: {
+ lastHour: "最近 {timer} 小时",
+ },
+ copyright: "版权所有© 华为软件技术有限公司2024。保留一切权利",
+};
diff --git a/src/main.ts b/src/main.ts
new file mode 100644
index 0000000000000000000000000000000000000000..651edd92cd2156bf334bfc729e34b0199897faba
--- /dev/null
+++ b/src/main.ts
@@ -0,0 +1,33 @@
+import { createApp } from "vue";
+import { createPinia } from "pinia";
+import ElementPlus from "element-plus";
+
+import opendesign2 from "@computing/opendesign2";
+import "element-plus/dist/index.css";
+import "@/assets/base.css";
+import "@computing/opendesign2/themes/es/css";
+import zhCn from "element-plus/es/locale/lang/zh-cn";
+import App from "./App.vue";
+import setupPlugins from "@/plugins";
+
+// 本地SVG图标
+import "virtual:svg-icons-register";
+import "@computing/opendesign2/themes/es/css";
+
+// 样式
+import "element-plus/theme-chalk/dark/css-vars.css";
+import "@/styles/index.scss";
+import "uno.css";
+import "animate.css";
+import router from "./router";
+
+const app = createApp(App);
+
+app.use(createPinia());
+app.use(router);
+app.use(ElementPlus, {
+ locale: zhCn,
+});
+app.use(setupPlugins);
+app.use(opendesign2);
+app.mount("#app");
diff --git a/src/plugins/icons.ts b/src/plugins/icons.ts
new file mode 100644
index 0000000000000000000000000000000000000000..fa85ba1473481fdb54a402885a64028778611feb
--- /dev/null
+++ b/src/plugins/icons.ts
@@ -0,0 +1,9 @@
+import type { App } from "vue";
+import * as ElementPlusIconsVue from "@element-plus/icons-vue";
+
+// 注册所有图标
+export function setupElIcons(app: App) {
+ for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
+ app.component(key, component);
+ }
+}
diff --git a/src/plugins/index.ts b/src/plugins/index.ts
new file mode 100644
index 0000000000000000000000000000000000000000..a716ae99a346cb6111e45d8b3a284e1e64967293
--- /dev/null
+++ b/src/plugins/index.ts
@@ -0,0 +1,21 @@
+import { setupI18n } from "@/lang";
+import { setupRouter } from "@/router";
+import { setupStore } from "@/store";
+import type { App } from "vue";
+import { setupElIcons } from "./icons";
+import { setupPermission } from "./permission";
+
+export default {
+ install(app: App) {
+ // 路由(router)
+ setupRouter(app);
+ // 国际化
+ setupI18n(app);
+ // Element-plus图标
+ setupElIcons(app);
+ // 路由守卫
+ setupPermission();
+ // 状态管理(store)
+ setupStore(app);
+ },
+};
diff --git a/src/plugins/permission.ts b/src/plugins/permission.ts
new file mode 100644
index 0000000000000000000000000000000000000000..a3ae8b557cdce41c8aef4715f957e131169240ce
--- /dev/null
+++ b/src/plugins/permission.ts
@@ -0,0 +1,43 @@
+import {
+ NavigationGuardNext,
+ RouteLocationNormalized,
+ RouteRecordRaw,
+} from "vue-router";
+
+import NProgress from "@/utils/nprogress";
+import { TOKEN_KEY } from "@/enums/CacheEnum";
+import router from "@/router";
+
+export function setupPermission() {
+ // 白名单路由
+ const whiteList = ["/login", "/NotFoundPage"];
+
+ router.beforeEach(async (to, from, next) => {
+ NProgress.start();
+ const hasToken = document.cookie;
+ if (hasToken?.length === 0 && !["/login", "/"].includes(to.path)) {
+ next({ path: "/login" });
+ NProgress.done();
+ } else {
+ // 未登录
+ if (whiteList.includes(to.path)) {
+ next(); // 在白名单,直接进入
+ } else {
+ // 不在白名单,重定向到登录页
+ next();
+ }
+ }
+ });
+
+ router.afterEach(() => {
+ NProgress.done();
+ });
+}
+
+/** 重定向到登录页 */
+function redirectToLogin(
+ to: RouteLocationNormalized,
+ next: NavigationGuardNext
+) {
+ next(`/login`);
+}
diff --git a/src/router/index.ts b/src/router/index.ts
new file mode 100644
index 0000000000000000000000000000000000000000..eee898a301f0e0855631d5f448c471f00a375082
--- /dev/null
+++ b/src/router/index.ts
@@ -0,0 +1,63 @@
+import type { App } from "vue";
+import { createRouter, createWebHashHistory, RouteRecordRaw } from "vue-router";
+
+// 静态路由
+export const constantRoutes: RouteRecordRaw[] = [
+ {
+ path: "/",
+ name: "/",
+ redirect: "/login",
+ },
+ {
+ path: "/login",
+ component: () => import("@/views/login/index.vue"),
+ meta: { hidden: true },
+ },
+ {
+ path: "/NotFoundPage",
+ component: () => import("@/views/notFoundPage/index.vue"),
+ meta: { hidden: true },
+ },
+ {
+ path: "/knowledge/library",
+ component: () => import("@/views/knowledgeLibrary/index.vue"),
+ meta: { hidden: true },
+ },
+ {
+ path: "/knowledge/file",
+ component: () => import("@/views/knowledgeFile/index.vue"),
+ meta: { hidden: true },
+ },
+ {
+ path: "/knowledge/fileSection",
+ component: () => import("@/views/knowledgeFileSection/index.vue"),
+ meta: { hidden: true },
+ },
+ {
+ path: "/:catchAll(.*)",
+ redirect: "/NotFoundPage",
+ },
+];
+/**
+ * 创建路由
+ */
+const router = createRouter({
+ history: createWebHashHistory(),
+ routes: constantRoutes,
+ // 刷新时,滚动条位置还原
+ scrollBehavior: () => ({ left: 0, top: 0 }),
+});
+
+// 全局注册 router
+export function setupRouter(app: App) {
+ app.use(router);
+}
+
+/**
+ * 重置路由
+ */
+export function resetRouter() {
+ window.open(`${window.origin}/#/login`, "_self");
+}
+
+export default router;
diff --git a/src/settings.ts b/src/settings.ts
new file mode 100644
index 0000000000000000000000000000000000000000..04707e5e872fd833fffac94fef4093b14bd21e65
--- /dev/null
+++ b/src/settings.ts
@@ -0,0 +1,22 @@
+import { ThemeEnum } from "./enums/ThemeEnum";
+import { LanguageEnum } from "./enums/LanguageEnum";
+
+const { pkg } = __APP_INFO__;
+
+const mediaQueryList = window.matchMedia("(prefers-color-scheme: dark)");
+
+const defaultSettings: AppSettings = {
+ title: pkg.name,
+ version: pkg.version,
+ showSettings: true,
+ tagsView: true,
+ fixedHeader: true,
+ sidebarLogo: true,
+ theme: mediaQueryList.matches ? ThemeEnum.DARK : ThemeEnum.LIGHT,
+ language: LanguageEnum.ZH_CN,
+ themeColor: "#409EFF",
+ watermarkEnabled: false,
+ watermarkContent: pkg.name,
+};
+
+export default defaultSettings;
diff --git a/src/store/index.ts b/src/store/index.ts
new file mode 100644
index 0000000000000000000000000000000000000000..809c5d23546c750156004dd94bd581ad103ee02b
--- /dev/null
+++ b/src/store/index.ts
@@ -0,0 +1,15 @@
+import type { App } from "vue";
+import { createPinia } from "pinia";
+
+const store = createPinia();
+
+// 全局注册 store
+export function setupStore(app: App) {
+ app.use(store);
+}
+
+export * from "./modules/app";
+export * from "./modules/permission";
+export * from "./modules/settings";
+export * from "./modules/user";
+export { store };
diff --git a/src/store/modules/app.ts b/src/store/modules/app.ts
new file mode 100644
index 0000000000000000000000000000000000000000..848fb4564c3502bf34cbe5521ea6cacb5463f3bb
--- /dev/null
+++ b/src/store/modules/app.ts
@@ -0,0 +1,39 @@
+import defaultSettings from "@/settings";
+
+// 导入 Element Plus 中英文语言包
+import zhCn from "element-plus/es/locale/lang/zh-cn";
+import en from "element-plus/es/locale/lang/en";
+import { store } from "@/store";
+
+export const useAppStore = defineStore("app", () => {
+ // 语言
+ const language = useStorage("language", defaultSettings.language);
+ /**
+ * 根据语言标识读取对应的语言包
+ */
+ const locale = computed(() => {
+ if (language?.value == "en") {
+ return en;
+ } else {
+ return zhCn;
+ }
+ });
+ /**
+ * 切换语言
+ *
+ * @param val
+ */
+ function changeLanguage(val: string) {
+ language.value = val;
+ }
+
+ return {
+ language,
+ locale,
+ changeLanguage,
+ };
+});
+
+export function useAppStoreHook() {
+ return useAppStore(store);
+}
diff --git a/src/store/modules/permission.ts b/src/store/modules/permission.ts
new file mode 100644
index 0000000000000000000000000000000000000000..38e837cada1087892d5278c4e6a669556244e623
--- /dev/null
+++ b/src/store/modules/permission.ts
@@ -0,0 +1,63 @@
+import { RouteRecordRaw } from "vue-router";
+import { constantRoutes } from "@/router";
+import { store } from "@/store";
+import MenuAPI, { RouteVO } from "@/api/menu";
+
+const modules = import.meta.glob("../../views/**/**.vue");
+
+export const usePermissionStore = defineStore("permission", () => {
+ /** 所有路由,包括静态和动态路由 */
+ const routes = ref([]);
+
+ /**
+ * 生成动态路由
+ */
+ function generateRoutes() {
+ return new Promise((resolve, reject) => {
+ MenuAPI.getRoutes()
+ .then((data) => {
+ const dynamicRoutes = transformRoutes(data);
+ routes.value = constantRoutes.concat(dynamicRoutes);
+ resolve(dynamicRoutes);
+ })
+ .catch((error) => {
+ reject(error);
+ });
+ });
+ }
+
+ return {
+ routes,
+ generateRoutes,
+ };
+});
+
+/**
+ * 转换路由数据为组件
+ */
+const transformRoutes = (routes: RouteVO[]) => {
+ const asyncRoutes: RouteRecordRaw[] = [];
+ routes.forEach((route) => {
+ const tmpRoute = { ...route } as RouteRecordRaw;
+ // 顶级目录,替换为 Layout 组件
+ // 其他菜单,根据组件路径动态加载组件
+ const component = modules[`../../views/${tmpRoute.component}.vue`];
+ if (component) {
+ tmpRoute.component = component;
+ } else {
+ tmpRoute.component = modules[`../../views/error-page/404.vue`];
+ }
+
+ if (tmpRoute.children) {
+ tmpRoute.children = transformRoutes(route.children);
+ }
+
+ asyncRoutes.push(tmpRoute);
+ });
+
+ return asyncRoutes;
+};
+
+export function usePermissionStoreHook() {
+ return usePermissionStore(store);
+}
diff --git a/src/store/modules/settings.ts b/src/store/modules/settings.ts
new file mode 100644
index 0000000000000000000000000000000000000000..4367e65083dbefb1cf802252da9e0f03fac16ce6
--- /dev/null
+++ b/src/store/modules/settings.ts
@@ -0,0 +1,61 @@
+import defaultSettings from "@/settings";
+import { ThemeEnum } from "@/enums/ThemeEnum";
+import Color from "color";
+
+type SettingsValue = boolean | string;
+
+export const useSettingsStore = defineStore("setting", () => {
+ // 是否固定头部
+ const fixedHeader = useStorage(
+ "fixedHeader",
+ defaultSettings.fixedHeader
+ );
+ // 主题颜色
+ const themeColor = useStorage(
+ "themeColor",
+ defaultSettings.themeColor
+ );
+
+ // 是否开启水印
+ const watermarkEnabled = useStorage(
+ "watermarkEnabled",
+ defaultSettings.watermarkEnabled
+ );
+
+ const settingsMap: Record> = {
+ fixedHeader,
+ watermarkEnabled,
+ };
+
+ function changeSetting({
+ key,
+ value,
+ }: {
+ key: string;
+ value: SettingsValue;
+ }) {
+ const setting = settingsMap[key];
+ if (setting) {
+ setting.value = value;
+ }
+ }
+
+
+ /**
+ * 切换主题颜色
+ *
+ * @param color 主题颜色
+ *
+ */
+ function changeThemeColor(color: string) {
+ themeColor.value = color;
+ }
+
+ return {
+ fixedHeader,
+ themeColor,
+ watermarkEnabled,
+ changeSetting,
+ changeThemeColor,
+ };
+});
diff --git a/src/store/modules/user.ts b/src/store/modules/user.ts
new file mode 100644
index 0000000000000000000000000000000000000000..56ebb13d3d301fc262bb8375cfc68c3dde7338c1
--- /dev/null
+++ b/src/store/modules/user.ts
@@ -0,0 +1,64 @@
+import AuthAPI, { type LoginData } from "@/api/auth";
+import { type UserInfo } from "@/api/user";
+import { resetRouter } from "@/router";
+import { store } from "@/store";
+import { TOKEN_KEY } from "@/enums/CacheEnum";
+
+export const useUserStore = defineStore("user", () => {
+ const user = ref({
+ roles: [],
+ perms: [],
+ });
+
+ /**
+ * 登录
+ *
+ * @param {LoginData}
+ * @returns
+ */
+ function login(loginData: LoginData) {
+ return new Promise((resolve, reject) => {
+ AuthAPI.login(loginData)
+ .then((data: any) => resolve(data))
+ .catch((error) => {
+ reject(error);
+ });
+ });
+ }
+
+ // user logout
+ function logout() {
+ return new Promise((resolve, reject) => {
+ AuthAPI.logout()
+ .then((data: any) => resolve(data))
+ .catch((error) => {
+ reject(error);
+ });
+ });
+ }
+
+ // remove token
+ function resetToken() {
+ return new Promise((resolve) => {
+ document.cookie = "";
+ resetRouter();
+ resolve();
+ });
+ }
+
+ return {
+ user,
+ login,
+ logout,
+ resetToken,
+ };
+});
+
+/**
+ * 用于在组件外部(如在Pinia Store 中)使用 Pinia 提供的 store 实例。
+ * 官方文档解释了如何在组件外部使用 Pinia Store:
+ * https://pinia.vuejs.org/core-concepts/outside-component-usage.html#using-a-store-outside-of-a-component
+ */
+export function useUserStoreHook() {
+ return useUserStore(store);
+}
diff --git a/src/styles/HarmonyOS_Sans/HarmonyOS_Sans_Black.woff b/src/styles/HarmonyOS_Sans/HarmonyOS_Sans_Black.woff
new file mode 100644
index 0000000000000000000000000000000000000000..d3a7a9a2f445580353177f71592f722a9f8264b7
Binary files /dev/null and b/src/styles/HarmonyOS_Sans/HarmonyOS_Sans_Black.woff differ
diff --git a/src/styles/HarmonyOS_Sans/HarmonyOS_Sans_Black.woff2 b/src/styles/HarmonyOS_Sans/HarmonyOS_Sans_Black.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..5b1b8fbe5c2b665c378f29a78c8bf9b245bafbe5
Binary files /dev/null and b/src/styles/HarmonyOS_Sans/HarmonyOS_Sans_Black.woff2 differ
diff --git a/src/styles/HarmonyOS_Sans/HarmonyOS_Sans_Bold.woff b/src/styles/HarmonyOS_Sans/HarmonyOS_Sans_Bold.woff
new file mode 100644
index 0000000000000000000000000000000000000000..90e19c2273855080af70ae1d57f4c650584947b9
Binary files /dev/null and b/src/styles/HarmonyOS_Sans/HarmonyOS_Sans_Bold.woff differ
diff --git a/src/styles/HarmonyOS_Sans/HarmonyOS_Sans_Bold.woff2 b/src/styles/HarmonyOS_Sans/HarmonyOS_Sans_Bold.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..69d0baa5db0c1fd1a6581c8fec2833e0d681c4ef
Binary files /dev/null and b/src/styles/HarmonyOS_Sans/HarmonyOS_Sans_Bold.woff2 differ
diff --git a/src/styles/HarmonyOS_Sans/HarmonyOS_Sans_Light.woff b/src/styles/HarmonyOS_Sans/HarmonyOS_Sans_Light.woff
new file mode 100644
index 0000000000000000000000000000000000000000..e06f7add695edd7ee5c39c1a67527a7df51dfae2
Binary files /dev/null and b/src/styles/HarmonyOS_Sans/HarmonyOS_Sans_Light.woff differ
diff --git a/src/styles/HarmonyOS_Sans/HarmonyOS_Sans_Light.woff2 b/src/styles/HarmonyOS_Sans/HarmonyOS_Sans_Light.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..f3731ae01c816eb7d461837b423d4a2b563e113f
Binary files /dev/null and b/src/styles/HarmonyOS_Sans/HarmonyOS_Sans_Light.woff2 differ
diff --git a/src/styles/HarmonyOS_Sans/HarmonyOS_Sans_Medium.woff b/src/styles/HarmonyOS_Sans/HarmonyOS_Sans_Medium.woff
new file mode 100644
index 0000000000000000000000000000000000000000..0568219cd88f5d376a7f083cf23cdce705cb70c9
Binary files /dev/null and b/src/styles/HarmonyOS_Sans/HarmonyOS_Sans_Medium.woff differ
diff --git a/src/styles/HarmonyOS_Sans/HarmonyOS_Sans_Medium.woff2 b/src/styles/HarmonyOS_Sans/HarmonyOS_Sans_Medium.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..63f418cb53701cd899c031cb189857d08cb1264b
Binary files /dev/null and b/src/styles/HarmonyOS_Sans/HarmonyOS_Sans_Medium.woff2 differ
diff --git a/src/styles/HarmonyOS_Sans/HarmonyOS_Sans_Regular.woff b/src/styles/HarmonyOS_Sans/HarmonyOS_Sans_Regular.woff
new file mode 100644
index 0000000000000000000000000000000000000000..dbe11e9c8547a59da3eae6174b5f2201c321d02f
Binary files /dev/null and b/src/styles/HarmonyOS_Sans/HarmonyOS_Sans_Regular.woff differ
diff --git a/src/styles/HarmonyOS_Sans/HarmonyOS_Sans_Regular.woff2 b/src/styles/HarmonyOS_Sans/HarmonyOS_Sans_Regular.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..633a70c07aee063d0f301b78cd2bf9d06d42d696
Binary files /dev/null and b/src/styles/HarmonyOS_Sans/HarmonyOS_Sans_Regular.woff2 differ
diff --git a/src/styles/HarmonyOS_Sans/HarmonyOS_Sans_Thin.woff b/src/styles/HarmonyOS_Sans/HarmonyOS_Sans_Thin.woff
new file mode 100644
index 0000000000000000000000000000000000000000..eb04aef0fa66e71063b346d79cbc2ae21fc67c71
Binary files /dev/null and b/src/styles/HarmonyOS_Sans/HarmonyOS_Sans_Thin.woff differ
diff --git a/src/styles/HarmonyOS_Sans/HarmonyOS_Sans_Thin.woff2 b/src/styles/HarmonyOS_Sans/HarmonyOS_Sans_Thin.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..bfe90d34d1a0823f78574f486ff6c2608007a747
Binary files /dev/null and b/src/styles/HarmonyOS_Sans/HarmonyOS_Sans_Thin.woff2 differ
diff --git a/src/styles/HarmonyOS_Sans/LICENSE.txt b/src/styles/HarmonyOS_Sans/LICENSE.txt
new file mode 100644
index 0000000000000000000000000000000000000000..84ac5d4dcdc9e5671ac3095bed9a9194a3e3c8f1
Binary files /dev/null and b/src/styles/HarmonyOS_Sans/LICENSE.txt differ
diff --git a/src/styles/HarmonyOS_Sans_SC/HarmonyOS_Sans_SC_Black.woff b/src/styles/HarmonyOS_Sans_SC/HarmonyOS_Sans_SC_Black.woff
new file mode 100644
index 0000000000000000000000000000000000000000..4824510dae9974c2f1eb2d64ad96b62d3c133bde
Binary files /dev/null and b/src/styles/HarmonyOS_Sans_SC/HarmonyOS_Sans_SC_Black.woff differ
diff --git a/src/styles/HarmonyOS_Sans_SC/HarmonyOS_Sans_SC_Black.woff2 b/src/styles/HarmonyOS_Sans_SC/HarmonyOS_Sans_SC_Black.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..749b12841bf135f3414e8baf4e18afc80e70587b
Binary files /dev/null and b/src/styles/HarmonyOS_Sans_SC/HarmonyOS_Sans_SC_Black.woff2 differ
diff --git a/src/styles/HarmonyOS_Sans_SC/HarmonyOS_Sans_SC_Bold.woff b/src/styles/HarmonyOS_Sans_SC/HarmonyOS_Sans_SC_Bold.woff
new file mode 100644
index 0000000000000000000000000000000000000000..ec892a1c1c6e9feda6d3ce5abe13c14bda6173c7
Binary files /dev/null and b/src/styles/HarmonyOS_Sans_SC/HarmonyOS_Sans_SC_Bold.woff differ
diff --git a/src/styles/HarmonyOS_Sans_SC/HarmonyOS_Sans_SC_Bold.woff2 b/src/styles/HarmonyOS_Sans_SC/HarmonyOS_Sans_SC_Bold.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..6cb17baa452ae6ee4f688adfa72be2d6c03938e7
Binary files /dev/null and b/src/styles/HarmonyOS_Sans_SC/HarmonyOS_Sans_SC_Bold.woff2 differ
diff --git a/src/styles/HarmonyOS_Sans_SC/HarmonyOS_Sans_SC_Light.woff b/src/styles/HarmonyOS_Sans_SC/HarmonyOS_Sans_SC_Light.woff
new file mode 100644
index 0000000000000000000000000000000000000000..ed26373b729bcb24a77741f950286bdd314b5730
Binary files /dev/null and b/src/styles/HarmonyOS_Sans_SC/HarmonyOS_Sans_SC_Light.woff differ
diff --git a/src/styles/HarmonyOS_Sans_SC/HarmonyOS_Sans_SC_Light.woff2 b/src/styles/HarmonyOS_Sans_SC/HarmonyOS_Sans_SC_Light.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..6a59240cbf4e699739dbe85d4e6d0ce3a21c60d7
Binary files /dev/null and b/src/styles/HarmonyOS_Sans_SC/HarmonyOS_Sans_SC_Light.woff2 differ
diff --git a/src/styles/HarmonyOS_Sans_SC/HarmonyOS_Sans_SC_Medium.woff b/src/styles/HarmonyOS_Sans_SC/HarmonyOS_Sans_SC_Medium.woff
new file mode 100644
index 0000000000000000000000000000000000000000..0ba379afc9b8c643898894a6a7a23076d286aaa5
Binary files /dev/null and b/src/styles/HarmonyOS_Sans_SC/HarmonyOS_Sans_SC_Medium.woff differ
diff --git a/src/styles/HarmonyOS_Sans_SC/HarmonyOS_Sans_SC_Medium.woff2 b/src/styles/HarmonyOS_Sans_SC/HarmonyOS_Sans_SC_Medium.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..d44a28aa609934818b770341d831f566b8b86eb6
Binary files /dev/null and b/src/styles/HarmonyOS_Sans_SC/HarmonyOS_Sans_SC_Medium.woff2 differ
diff --git a/src/styles/HarmonyOS_Sans_SC/HarmonyOS_Sans_SC_Regular.woff b/src/styles/HarmonyOS_Sans_SC/HarmonyOS_Sans_SC_Regular.woff
new file mode 100644
index 0000000000000000000000000000000000000000..1b32066b3adf0903ccbbfaea99ef52f6078c228c
Binary files /dev/null and b/src/styles/HarmonyOS_Sans_SC/HarmonyOS_Sans_SC_Regular.woff differ
diff --git a/src/styles/HarmonyOS_Sans_SC/HarmonyOS_Sans_SC_Regular.woff2 b/src/styles/HarmonyOS_Sans_SC/HarmonyOS_Sans_SC_Regular.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..1216831e24806fe551138871c6ec9e7be98dbed1
Binary files /dev/null and b/src/styles/HarmonyOS_Sans_SC/HarmonyOS_Sans_SC_Regular.woff2 differ
diff --git a/src/styles/HarmonyOS_Sans_SC/HarmonyOS_Sans_SC_Thin.woff b/src/styles/HarmonyOS_Sans_SC/HarmonyOS_Sans_SC_Thin.woff
new file mode 100644
index 0000000000000000000000000000000000000000..650c30466f3378e4e324577b1e4712eeb0ccb1a5
Binary files /dev/null and b/src/styles/HarmonyOS_Sans_SC/HarmonyOS_Sans_SC_Thin.woff differ
diff --git a/src/styles/HarmonyOS_Sans_SC/HarmonyOS_Sans_SC_Thin.woff2 b/src/styles/HarmonyOS_Sans_SC/HarmonyOS_Sans_SC_Thin.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..37cf9b3340aa41594bc305868a47e54085771a6e
Binary files /dev/null and b/src/styles/HarmonyOS_Sans_SC/HarmonyOS_Sans_SC_Thin.woff2 differ
diff --git a/src/styles/app.scss b/src/styles/app.scss
new file mode 100644
index 0000000000000000000000000000000000000000..0811b459cf2e7cf51350bbbe4fe9f5b7b5686fca
--- /dev/null
+++ b/src/styles/app.scss
@@ -0,0 +1,34 @@
+html,
+body,
+#app {
+ box-sizing: border-box;
+ height: 100vh;
+ padding: 0;
+ margin: 0;
+}
+
+.euler-copilot-container {
+ position: relative;
+ display: flex;
+ flex-direction: column;
+ width: 100%;
+ min-width: 600px;
+ overflow-y: auto;
+ background: url("/src/assets/images/login-background-light.png") center/100%
+ 100%;
+}
+
+.main-container {
+ box-sizing: border-box;
+ display: flex;
+ flex: 1;
+ align-items: start;
+ justify-content: flex-start;
+ width: 100%;
+ min-height: 750px;
+}
+
+html.dark .euler-copilot-container {
+ background: url("@/assets/images/login-background-dark.jpg") no-repeat center
+ right;
+}
diff --git a/src/styles/dark.scss b/src/styles/dark.scss
new file mode 100644
index 0000000000000000000000000000000000000000..57c986902a0ac2d44ae3ec42b37dd34d88fe6b24
--- /dev/null
+++ b/src/styles/dark.scss
@@ -0,0 +1,21 @@
+html.dark {
+ .platform-login-text {
+ font-size: 12px;
+ }
+
+ .el-input-wrapper {
+ background: var(--el-input-bg-color) !important;
+ }
+
+ .el-form-item {
+ background: var(--el-input-bg-color);
+ }
+
+ .el-input__wrapper {
+ background: var(--el-input-bg-color) !important;
+ }
+
+ .el-input__inner {
+ color: white !important;
+ }
+}
diff --git a/src/styles/headerBar.scss b/src/styles/headerBar.scss
new file mode 100644
index 0000000000000000000000000000000000000000..a2aa90953053e8d306bd82bc73f66369e91c4da6
--- /dev/null
+++ b/src/styles/headerBar.scss
@@ -0,0 +1,68 @@
+.el-affix {
+ height: 42px;
+}
+
+.platform-header {
+ display: flex;
+ justify-content: space-between;
+ height: 48px !important;
+ padding: 0 24px !important;
+ background-color: transparent;
+
+ .platform-title {
+ display: flex;
+ gap: 8px;
+ align-items: center;
+ .project-name {
+ font-size: 16px;
+ letter-spacing: 0px;
+ font-weight: 700;
+ }
+ }
+
+ .el-popper.is-pure.is-light.el-dropdown__popper {
+ top: 42px !important;
+ }
+
+ .el-dropdown-link:hover {
+ color: var(--el-text-color-regular) !important;
+ }
+
+ .el-dropdown-link {
+ color: var(--el-text-color-regular) !important;
+ outline: 0 !important;
+ }
+}
+
+.top-bar {
+ position: relative;
+ top: 0;
+ right: 0;
+ display: flex;
+ align-items: center;
+ justify-content: flex-end;
+ height: 48px;
+}
+
+.user-platform-header {
+ width: 100%;
+ height: 300px;
+ background: url("/src/assets/images/userHeader.jpeg") center/101% 100%;
+}
+
+.page-platform-header {
+ background-color: rgb(253 254 255);
+ box-shadow: inset 0 -2px 0 0 rgb(244 246 250);
+}
+
+.user-platform-header,
+.page-platform-header {
+ min-width: 1240px;
+ .header-container {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ width: 100%;
+ height: 48px;
+ }
+}
diff --git a/src/styles/index.scss b/src/styles/index.scss
new file mode 100644
index 0000000000000000000000000000000000000000..3df4ef435ca3975be4d73d48d2de86e2b4d0d6ec
--- /dev/null
+++ b/src/styles/index.scss
@@ -0,0 +1,33 @@
+@use "./reset";
+@use "./dark";
+
+.app-container {
+ padding: 15px;
+}
+
+.search-container {
+ padding: 18px 0 0 10px;
+ margin-bottom: 10px;
+ background-color: var(--el-bg-color-overlay);
+ border: 1px solid var(--el-border-color-light);
+ border-radius: 4px;
+ box-shadow: var(--el-box-shadow-light);
+}
+
+.table-container > .el-card__header {
+ padding: calc(var(--el-card-padding) - 8px) var(--el-card-padding);
+}
+
+.link-type,
+.link-type:focus {
+ color: #337ab7;
+ cursor: pointer;
+
+ &:hover {
+ color: rgb(32 160 255);
+ }
+}
+
+.search-container .el-form .el-input {
+ width: 16rem !important;
+}
diff --git a/src/styles/knowledgeFile.scss b/src/styles/knowledgeFile.scss
new file mode 100644
index 0000000000000000000000000000000000000000..d352a0bf25e5dc8c9f565548f9a47a5591283bd8
--- /dev/null
+++ b/src/styles/knowledgeFile.scss
@@ -0,0 +1,581 @@
+.kf-container {
+ display: flex;
+ flex-direction: column;
+ gap: 16px;
+ width: 100%;
+ height: calc(100% - 48px);
+ padding: 16px 24px 24px;
+ min-width: 1240px;
+ .kf-container-top {
+ display: flex;
+ gap: 24px;
+ align-items: center;
+
+ .kf-left-menu {
+ display: flex;
+ gap: 4px;
+ align-items: center;
+ width: 232px;
+ height: 16px;
+
+ .home-menu {
+ display: inline-block;
+ max-width: 80px;
+ height: 16px;
+ font-size: 12px;
+ line-height: 16px;
+ }
+
+ .kf-name {
+ max-width: 152px;
+ font-size: 12px;
+ font-weight: 700;
+ }
+ }
+
+ .kf-right-title {
+ font-size: 18px;
+ font-weight: 700;
+ }
+ }
+
+ .kf-container-action {
+ position: relative;
+ display: flex;
+ gap: 24px;
+ width: 100%;
+ height: 100%;
+ min-height: 500px;
+
+ .kf-container-left {
+ width: 232px;
+ min-width: 232px;
+ .kf-file-config {
+ margin-top: 8px;
+ }
+
+ .kf-file-btn,
+ .kf-file-config {
+ font-size: 12px;
+ height: 32px;
+ padding-left: 16px;
+ line-height: 32px;
+ color: rgb(77 88 101);
+ cursor: pointer;
+ background-color: rgb(254 254 254);
+ border-radius: 4px;
+ }
+
+ .kf-ops-btn {
+ color: rgb(255 255 255);
+ background: rgb(0 119 255);
+ }
+ }
+
+ .kf-container-right {
+ flex: 1;
+ min-width: 700px;
+ padding: 16px 24px 24px 24px;
+ background: rgb(254 254 254);
+ border-radius: 4px;
+
+ .kf-container-table-ops {
+ display: flex;
+ margin-bottom: 8px;
+
+ .importFileBtn {
+ padding: 8px 15px;
+ }
+
+ .is-disabled {
+ background: #ebedf3;
+ }
+
+ .delFileBtn {
+ padding: 8px 27px;
+ margin-left: 8px;
+
+ span {
+ min-width: unset !important;
+ }
+ }
+
+ .el-dropdown {
+ button {
+ min-width: 96px;
+ padding: 8px 13.2px;
+ }
+ }
+ }
+
+ .kf-container-table-box {
+ height: calc(100% - 40px);
+ display: flex;
+ flex-direction: column;
+ tbody {
+ td {
+ border-right: unset !important;
+ }
+ }
+ .el-table.is-scrolling-left.el-table--border
+ .el-table-fixed-column--left.is-last-column.el-table__cell {
+ border-right: unset !important;
+ }
+ .el-table {
+ ::-webkit-scrollbar {
+ width: 4px !important;
+ }
+ .el-scrollbar__bar.is-vertical {
+ width: 4px !important;
+ }
+ }
+ }
+
+ .kf-name-row {
+ color: #0077ff;
+ font-size: 12px;
+ font-weight: 500;
+ cursor: pointer;
+ }
+
+ .el-table__body-wrapper {
+ flex: unset !important;
+ }
+
+ .el-checkbox__inner::before {
+ top: 4.5px !important;
+ width: 13px;
+ }
+
+ .upload-time-cell {
+ .cell {
+ display: flex;
+ align-items: center;
+ }
+ }
+
+ .el-table__header {
+ height: 32px;
+ width: 100% !important;
+ box-shadow: inset 0 -1px 0 0 rgb(223 229 239);
+
+ thead tr th {
+ background-color: #f4f6fa;
+ }
+ }
+
+ .el-table__body {
+ width: 100% !important;
+ color: black !important;
+
+ .el-table__row {
+ height: 48px;
+ }
+ }
+
+ .el-table__cell {
+ padding: 0 !important;
+ font-size: 12px;
+ }
+
+ .el-table-column--selection .cell {
+ padding-right: 0 !important;
+ padding-left: 10px !important;
+ }
+
+ .kl-selection::after {
+ content: unset !important;
+ }
+
+ .kl-name .cell {
+ padding-left: 0 !important;
+ }
+
+ .el-pagination {
+ margin-top: 0;
+ margin-top: 24px !important;
+ }
+
+ .el-pagination .el-input__inner {
+ height: var(--el-input-inner-height) !important;
+ }
+
+ .statusFail,
+ .statusSuccess,
+ .statusCancel {
+ height: 24px;
+ width: fit-content;
+ padding: 0px 8px;
+ font-size: 12px;
+ line-height: 24px;
+ color: rgb(255 255 255);
+ text-align: center;
+ border-radius: 2px;
+ }
+
+ .statusFail {
+ background: rgb(227, 32, 32);
+ }
+
+ .statusSuccess {
+ background: rgb(36, 171, 54);
+ }
+
+ .statusCancel {
+ background: rgb(141, 152, 170);
+ }
+
+ .statusWaitIng {
+ display: flex;
+ align-items: center;
+ gap: 9px;
+ }
+
+ @keyframes rotate-img {
+ from {
+ transform: rotate(0);
+ }
+
+ to {
+ transform: rotate(360deg);
+ }
+ }
+
+ .icon-loading {
+ height: 16px;
+ width: 16px;
+ background-repeat: no-repeat !important;
+ background-size: 100% !important;
+ display: inline-block;
+ background: url("/src/assets/icons/taskLoading.png");
+ }
+
+ .icon-box {
+ animation: rotate-img 0.8s infinite linear;
+ }
+
+ .statusAnalysis {
+ display: flex;
+ align-items: center;
+
+ .percent-box {
+ .el-progress-bar {
+ width: 88px;
+ }
+ .el-progress__text {
+ width: fit-content;
+ }
+ }
+
+ .el-progress__text {
+ width: 24px;
+ min-width: 18px;
+ color: rgb(0 0 0);
+ }
+
+ .statusAnalysisText {
+ font-size: 12px;
+ font-family: "HarmonyOS Sans SC Medium";
+ margin-left: 2px;
+ color: rgb(0 0 0);
+ }
+ }
+
+ .el-switch,
+ .el-switch__core {
+ width: 32px !important;
+ min-width: unset !important;
+ height: 16px !important;
+ }
+
+ .el-switch__action {
+ top: 1.3px;
+ left: 1.5px;
+ width: 12px !important;
+ height: 12px !important;
+ }
+
+ .el-switch.is-checked .el-switch__core .el-switch__action {
+ left: calc(100% - 13px) !important;
+ }
+
+ .custom-header {
+ display: flex;
+ gap: 4px;
+ align-items: center;
+ .searchIconIsActive {
+ color: #0077ff !important;
+ }
+
+ .el-icon {
+ font-size: 16px;
+ color: #8d98aa;
+ }
+
+ .el-icon:hover {
+ color: #0077ff;
+ }
+
+ svg {
+ width: 16px;
+ height: 16px;
+ }
+ }
+
+ .kl-ruleForm {
+ max-width: 1000px !important;
+
+ .el-select__popper {
+ top: 44px !important;
+ box-sizing: border-box;
+ width: 100% !important;
+ background: #fefefe !important;
+ border: 1px solid #07f !important;
+
+ .el-select-dropdown {
+ width: 100% !important;
+ max-width: unset !important;
+ }
+ }
+
+ .el-select-dropdown__item.is-hovering {
+ color: #fff;
+ background: #07f !important;
+ width: 399px;
+ }
+
+ .el-form-item__content {
+ flex: unset !important;
+ width: 400px !important;
+
+ .el-input,
+ .el-select__wrapper,
+ .el-textarea__inner {
+ width: 400px !important;
+ font-size: 12px;
+ color: var(--o-color-black);
+ }
+
+ .el-input__inner {
+ font-size: 12px;
+ color: var(--o-color-black);
+ }
+
+ .el-textarea__inner {
+ height: 88px;
+ }
+ }
+
+ .config-form {
+ .el-form-item__content {
+ width: 600px !important;
+
+ .supAddCategoris {
+ width: 400px !important;
+ height: 24px;
+ line-height: 24px;
+ }
+ }
+
+ .resetBtn {
+ height: 32px !important;
+ }
+ }
+ }
+
+ .kl-ops-btn {
+ position: absolute;
+ bottom: 0;
+ width: calc(100% - 256px);
+ height: 48px;
+ margin-bottom: unset !important;
+ background: rgb(254 254 254);
+ border-radius: 4px;
+ transform: translateX(-16px);
+
+ .el-form-item__content {
+ margin-left: 0 !important;
+ }
+
+ .resetBtn {
+ width: 80px;
+ }
+ }
+
+ .domain-config {
+ margin-bottom: 8px !important;
+ }
+
+ .config-form {
+ margin-bottom: 16px !important;
+ }
+ }
+ }
+
+ .kf-container-form {
+ height: calc(100% - 64px);
+ padding-bottom: 0 !important;
+ overflow-y: auto;
+ padding-top: 24px !important;
+ padding-left: 16px !important;
+ .is-focused,
+ .el-select__selected-item {
+ span {
+ color: #000000 !important;
+ }
+ }
+
+ .el-input__inner {
+ color: #000000 !important;
+ }
+
+ .el-form-item .is-disabled span {
+ color: rgb(191, 199, 215) !important;
+ }
+ }
+}
+
+.kf-ops-dowlon {
+ .el-dropdown-menu {
+ padding: 4px 0 !important;
+ }
+ .el-dropdown-menu__item {
+ font-size: 12px;
+ }
+}
+
+.upload-dialog {
+ width: 560px;
+ padding: 0 !important;
+}
+.upload-drag {
+ color: rgb(78, 88, 101);
+ font-size: 12px;
+}
+.upload-tip-text {
+ width: 480px;
+}
+
+.chooseFileBtn {
+ padding: 4px 8px;
+}
+
+.edit-dialog {
+ padding: 0 !important;
+ .el-dialog__body {
+ padding-bottom: 0 !important;
+ }
+ .kf-ruleForm {
+ .el-form-item {
+ gap: unset !important;
+ margin-bottom: 24px;
+ }
+
+ .kl-ops-btn {
+ display: flex;
+ justify-content: center;
+ height: 24px !important;
+ margin-top: 32px;
+ .el-button {
+ height: 24px;
+ }
+
+ .el-form-item__content {
+ display: flex;
+ height: 24px !important;
+ min-height: unset !important;
+ justify-content: center;
+ margin-left: unset !important;
+ }
+ }
+ }
+
+ .docTypeClass {
+ max-height: 150px;
+ overflow-x: hidden;
+
+ .el-select-dropdown {
+ height: 100%;
+ overflow-y: auto;
+ }
+ }
+
+ .docName {
+ label {
+ transform: translateX(-9px);
+ }
+ }
+
+ .editTip {
+ display: flex;
+ gap: 9px;
+ margin-top: 4px;
+ }
+
+ .iconAlarmOrange {
+ svg {
+ width: 20px;
+ height: 16px;
+ }
+ }
+
+ .editTipText {
+ font-size: 12px;
+ color: #8d98aa;
+ }
+
+ .config-size {
+ width: 111px !important;
+ }
+
+ .fileChunkSize {
+ .el-form-item__content {
+ line-height: 12px;
+ }
+ }
+
+ .el-select__popper {
+ top: 44px !important;
+ box-sizing: border-box;
+ width: 100% !important;
+ background: #fefefe !important;
+ border: 1px solid #07f !important;
+
+ .el-select-dropdown {
+ width: 100% !important;
+ max-width: unset !important;
+ }
+ }
+
+ .el-select-dropdown__item.is-hovering {
+ color: #fff !important;
+ background: #07f;
+ width: 319px;
+ }
+}
+
+.tip-dialog {
+ .delTip {
+ display: flex;
+ gap: 17.5px;
+ align-items: center;
+ }
+
+ .iconAlarmOrange {
+ svg {
+ width: 28px;
+ height: 24px;
+ }
+ }
+}
+
+.delTipText {
+ display: inline-block;
+ width: 300px;
+}
+
+.delToolTip {
+ display: inline-block;
+ max-width: 150px;
+ line-height: 12px;
+}
diff --git a/src/styles/knowledgeFileSection.scss b/src/styles/knowledgeFileSection.scss
new file mode 100644
index 0000000000000000000000000000000000000000..39d4edc16fb3187ef75b6b1779f6970607c7c099
--- /dev/null
+++ b/src/styles/knowledgeFileSection.scss
@@ -0,0 +1,493 @@
+.kf-section-container {
+ display: flex;
+ flex-direction: column;
+ gap: 16px;
+ width: 100%;
+ height: 100%;
+ padding: 16px 24px 24px;
+ min-width: 1240px;
+ .kf-section-container-top {
+ display: flex;
+ align-items: center;
+ height: 24px;
+
+ .kf-section-left-menu {
+ display: flex;
+ gap: 4px;
+ align-items: center;
+ width: 310px;
+
+ .home-menu {
+ max-width: 80px;
+ height: 16px;
+ font-size: 12px;
+ line-height: 16px;
+ }
+
+ .kf-section-name {
+ font-size: 12px;
+ font-weight: 700;
+ }
+ }
+
+ .kf-section-right-title {
+ font-size: 18px;
+ font-weight: 700;
+ }
+ }
+
+ .kf-section-container-action {
+ display: flex;
+ gap: 2px;
+ width: 100%;
+ height: calc(100% - 80px);
+
+ .kf-section-container-left {
+ display: flex;
+ flex-direction: column;
+ gap: 16px;
+ width: 314px;
+ padding: 24px;
+ background: rgb(254 254 254);
+ border-top-left-radius: 4px;
+ border-bottom-left-radius: 4px;
+ box-shadow: iniset -1px 0 0 0 rgb(223 229 239);
+
+ .kf-section-info-title {
+ font-size: 16px;
+ font-weight: 700;
+ }
+
+ .kf-section-info-desc {
+ display: flex;
+
+ .kf-section-info-label {
+ width: 101px;
+ font-size: 12px;
+ color: rgb(78 88 101);
+ }
+
+ .kf-section-info-content {
+ max-width: 145px;
+ font-size: 12px;
+ }
+ }
+ }
+
+ .kf-section-container-right {
+ flex: 1;
+ min-width: 700px;
+ height: 100%;
+ padding: 24px 0 24px 24px;
+ overflow: hidden;
+ background: rgb(254 254 254);
+ border-top-right-radius: 4px;
+ border-bottom-right-radius: 4px;
+
+ .kf-section-container-table-ops {
+ display: flex;
+ gap: 24px;
+ margin-bottom: 8px;
+
+ .kf-pre-title {
+ font-size: 16px;
+ font-weight: 700;
+ }
+
+ .kf-btn-search {
+ display: flex;
+ .el-input-group__prepend {
+ width: 120px;
+ height: 32px;
+ box-sizing: border-box;
+ padding: unset !important;
+ background: white !important;
+ border-color: blue;
+ }
+ .el-input__wrapper {
+ width: 280px;
+ padding-right: 8px !important;
+ .el-input__suffix {
+ .el-input__icon {
+ font-size: 16px;
+ }
+ }
+ }
+ .el-input__inner {
+ font-size: 12px !important;
+ }
+ }
+
+ .el-input__wrapper {
+ width: 280px !important;
+ .el-input__inner {
+ width: 280px;
+ }
+ }
+ }
+
+ .kf-section-container-table-box {
+ height: 100%;
+
+ .el-scrollbar {
+ padding-right: 24px;
+ }
+
+ .el-table__body {
+ width: unset !important;
+ }
+
+ .el-scrollbar .el-scrollbar__bar .el-scrollbar__thumb {
+ background: #c3cedf !important;
+ opacity: 1;
+ }
+
+ .is-horizontal {
+ display: none;
+ }
+
+ ::-webkit-scrollbar-track {
+ background: #c3cedf !important;
+ border-radius: 1px;
+ }
+
+ /* 滚动条滑块样式 */
+ ::-webkit-scrollbar-thumb {
+ background: #c3cedf !important;
+ background-clip: content-box;
+ border-radius: 4px;
+ }
+ tbody {
+ .el-checkbox__inner::after {
+ top: 0;
+ left: 3px;
+ }
+ }
+ }
+
+ .el-table {
+ width: 100%;
+ max-height: calc(100% - 96px) !important;
+ overflow-x: hidden !important;
+ }
+
+ .showPagination {
+ max-height: 100% !important;
+ }
+
+ .el-checkbox__inner::before {
+ top: 4.5px !important;
+ width: 13px;
+ }
+
+ .el-table__header {
+ height: 32px;
+ colgroup {
+ col:first-child {
+ width: 24px !important;
+ }
+ }
+ .kf-selection {
+ border-bottom: unset;
+
+ .cell {
+ width: 24px !important;
+ padding-right: 0 !important;
+ padding-left: 0 !important;
+ }
+ }
+
+ col[name="el-table_1_column_1"] {
+ width: 24px !important;
+ }
+
+ .kf-file-content {
+ border-bottom: unset;
+ }
+
+ .kf-file-type {
+ border-bottom: unset;
+ display: none;
+ }
+
+ .kf-file-content .cell {
+ width: 100px;
+ padding-left: 0 !important;
+ }
+
+ .kf-selection::after {
+ content: unset !important;
+ }
+ }
+
+ .el-table__body {
+ color: black !important;
+ transform: translateY(-8px);
+ colgroup {
+ col:first-child {
+ width: 46px !important;
+ }
+ }
+ .el-table__row {
+ height: 48px;
+ }
+
+ .kf-selection {
+ width: 46px !important;
+ border-top: 1px solid rgb(223 229 239);
+ border-left: 1px solid rgb(223 229 239);
+ border-top-left-radius: 4px;
+ border-bottom-left-radius: 4px;
+
+ .cell {
+ width: 46px !important;
+ position: absolute !important;
+ top: 13px !important;
+ padding-left: 18px;
+ }
+ .el-checkbox__inner {
+ width: 12px;
+ height: 12px;
+ }
+ }
+
+ .text-type-tag {
+ display: inline-block;
+ margin-right: 5px;
+ height: 16px;
+ padding: 0 8px;
+ font-size: 12px;
+ line-height: 16px;
+ border-radius: 2px;
+ }
+ .text-type-para {
+ color: rgb(0, 119, 255);
+ background-color: rgb(184, 217, 255);
+ }
+ .text-type-table {
+ background-color: rgb(194, 231, 199);
+ color: rgb(36, 171, 54);
+ }
+ .text-type-image {
+ background-color: rgb(253, 217, 188);
+ color: rgb(249, 118, 17);
+ }
+ .kf-file-content {
+ margin-top: 20px;
+ border-top: 1px solid rgb(223 229 239);
+ border-right: 1px solid rgb(223 229 239);
+ border-top-right-radius: 4px;
+ border-bottom-right-radius: 4px;
+
+ .cell {
+ padding-right: 16px;
+ padding-left: 0;
+ font-size: 12px;
+ line-height: 16px;
+ text-align: left;
+ letter-spacing: 0;
+ }
+
+ .kf-file-content-box {
+ display: flex;
+ gap: 16px;
+ justify-content: space-between;
+
+ .kf-file-content-text {
+ padding: 16px 0;
+ .highlighted-term {
+ display: inline-block;
+ background: rgb(235, 175, 0);
+ }
+ }
+
+ .kf-file-content-ops {
+ padding: 16px 0;
+ }
+ }
+ }
+ }
+
+ .el-table__cell {
+ padding: 0 !important;
+ font-size: 12px;
+ }
+
+ .el-pagination {
+ margin-top: 0;
+ margin-top: 24px !important;
+ }
+
+ .el-pagination .el-input__inner {
+ height: var(--el-input-inner-height) !important;
+ }
+
+ .el-switch,
+ .el-switch__core {
+ width: 32px !important;
+ min-width: unset !important;
+ height: 16px !important;
+ }
+
+ .el-switch__action {
+ top: 1.3px;
+ left: 1.5px;
+ width: 12px !important;
+ height: 12px !important;
+ }
+
+ .el-switch.is-checked .el-switch__core .el-switch__action {
+ left: calc(100% - 13px) !important;
+ }
+ }
+
+ .kf-batch-ops {
+ width: 72px;
+ }
+ }
+
+ .kf-section-name {
+ max-width: 120px;
+ }
+
+ .libraryName {
+ display: inline-block;
+ max-width: 120px;
+
+ .el-link__inner {
+ display: inline-block;
+ width: 100%;
+ }
+ }
+}
+
+.kf-section-ops-dowlon {
+ width: 72px;
+
+ .el-dropdown-menu__item {
+ font-size: 12px;
+ }
+
+ .el-dropdown-menu {
+ overflow: hidden;
+ }
+}
+.fileTypeSelect {
+ height: 32px;
+ min-height: unset !important;
+ background-color: white !important;
+ .el-select__wrapper {
+ height: 32px;
+ min-height: unset !important;
+ }
+ .el-select__selection {
+ display: flex !important;
+ .el-select__selected-item {
+ width: 30px;
+ background: unset !important;
+ }
+ .el-tag {
+ background: unset !important;
+ }
+ .el-tag__close {
+ display: none;
+ }
+ }
+}
+.file-type-select {
+ min-height: unset !important;
+ background-color: white !important;
+ border: 1px solid #409eff;
+ .el-select-dropdown__item.is-hovering {
+ color: #fff !important;
+ background: #07f;
+ }
+ li::before {
+ display: none !important;
+ }
+}
+
+.fileTypePoperClass {
+ width: 120px !important;
+ min-width: unset !important;
+ transform: translateY(-10px);
+ background: white !important;
+ border: 1px solid #0077ff !important;
+ padding: 4px 16px !important;
+ .el-checkbox__input.is-indeterminate .el-checkbox__inner:before {
+ transform: translateX(3px);
+ }
+ .el-checkbox {
+ position: relative;
+ }
+ .el-checkbox__label {
+ font-size: 12px !important;
+ }
+
+ .isFileTypeChcekHover {
+ .el-checkbox__label {
+ color: rgb(255 255 255) !important;
+ }
+
+ .el-checkbox__inner {
+ box-sizing: border-box;
+ border-color: rgb(208 212 220) !important;
+ }
+ }
+
+ .isFileTypeChcekHover::after {
+ position: absolute;
+ content: "";
+ display: block;
+ z-index: -1;
+ width: 120px;
+ height: 32px;
+ left: -16px;
+ background-color: #409eff;
+ }
+}
+.fileCheckTypeShow {
+ display: inline-block;
+ width: 100%;
+ height: 100%;
+ display: flex;
+ justify-content: center;
+ gap: 8px;
+ .fileCheckTypeContent {
+ width: 64px;
+ height: 32px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ span {
+ font-size: 12px !important;
+ }
+ }
+ .el-icon-fileType {
+ font-size: 16px;
+ }
+ .fileTypeIcon {
+ display: flex;
+ align-items: center;
+ }
+ .icon-up {
+ color: var(--color) !important;
+ }
+}
+.filteTypeShowClass {
+ border-radius: 2px;
+ border: 1px solid #0077ff;
+ .fileCheckTypeContent {
+ transform: translateY(-1px);
+ span {
+ font-size: 12px !important;
+ }
+ }
+}
+
+.kf-section-container-table-box {
+ .el-table__body {
+ // -webkit-border-horizontal-spacing: 13px; // 水平间距
+ -webkit-border-vertical-spacing: 8px; // 垂直间距
+ }
+}
diff --git a/src/styles/knowledgeForm.scss b/src/styles/knowledgeForm.scss
new file mode 100644
index 0000000000000000000000000000000000000000..68fe1e8aa83b1bb1aab9cdb61641ea63c4a3e18f
--- /dev/null
+++ b/src/styles/knowledgeForm.scss
@@ -0,0 +1,382 @@
+.domain-config {
+ label {
+ opacity: 0;
+ }
+
+ .el-form-item__content {
+ position: relative;
+ display: flex;
+ flex-wrap: nowrap;
+ gap: 8px;
+ align-items: center;
+ width: 320px;
+
+ .deleteConfig {
+ position: absolute;
+ right: -22px;
+ cursor: pointer;
+ }
+
+ .deleteConfig:hover {
+ color: #0077ff;
+ }
+ }
+}
+
+.kl-ruleForm {
+ padding-bottom: 0;
+
+ .el-select__popper {
+ top: 44px !important;
+ box-sizing: border-box;
+ width: 100% !important;
+ background: #fefefe !important;
+ border: 1px solid #07f !important;
+
+ .el-select-dropdown {
+ width: 100% !important;
+ max-width: unset !important;
+ }
+ }
+
+ .el-form-item {
+ gap: 24px;
+ margin-bottom: 24px;
+
+ .el-form-item__label-wrap {
+ display: unset !important;
+ }
+
+ .is-focused,
+ .el-select__selected-item {
+ span {
+ color: #000000 !important;
+ }
+ }
+
+ .is-disabled {
+ span {
+ color: rgb(191, 199, 215) !important;
+ }
+ }
+
+ .el-input__inner {
+ color: #000000 !important;
+ }
+
+ .is-transparent {
+ span {
+ color: #a8abb2 !important;
+ }
+ }
+
+ .is-focused {
+ span {
+ color: #000000 !important;
+ }
+ }
+
+ .removeIsTrans {
+ span {
+ color: #a8abb2 !important;
+ }
+ }
+
+ .el-textarea__inner {
+ color: #000000 !important;
+ }
+ }
+
+ .config-size {
+ width: 111px;
+
+ .el-input-number__increase,
+ .el-input-number__decrease {
+ background: transparent;
+ .el-icon {
+ color: #8d98aa;
+ }
+ }
+ .el-input__wrapper {
+ width: 50px !important;
+ overflow: hidden !important;
+ padding-left: 30px !important;
+ padding-right: 30px !important;
+ }
+ .el-input__inner {
+ width: 50px !important;
+ overflow: hidden !important;
+ padding-left: 5px !important;
+ padding-right: 5px !important;
+ }
+ }
+
+ .el-select-dropdown__item.is-hovering {
+ color: #fff !important;
+ background: #07f;
+ }
+
+ .el-form-item__content {
+ flex: unset !important;
+ width: 320px !important;
+
+ .el-input,
+ .el-select__wrapper,
+ .el-textarea__inner {
+ width: 320px !important;
+ font-size: 12px;
+ color: var(--o-color-black);
+ }
+
+ .el-input__inner {
+ font-size: 12px;
+ color: var(--o-color-black);
+ }
+
+ .el-textarea__inner {
+ height: 88px;
+ }
+ }
+
+ .domain-config {
+ margin-bottom: 8px !important;
+ }
+
+ .config-form,
+ .config-size-desc {
+ .el-form-item__label::before {
+ display: block;
+ margin-right: 4px;
+ content: "*";
+ opacity: 0;
+ }
+ }
+
+ .el-form-item__label {
+ display: flex;
+ gap: 4px;
+ align-items: center;
+ padding: 0 !important;
+ font-size: 12px !important;
+
+ .el-icon {
+ margin-top: 2px;
+ font-size: 16px;
+ cursor: pointer;
+ }
+
+ .el-icon:hover {
+ color: rgb(82 163 255);
+ }
+ }
+
+ .el-form-item__label::before {
+ margin-right: 0 !important;
+ }
+
+ .config-form {
+ margin-bottom: 8px !important;
+ height: 24px !important;
+ .el-form-item__content {
+ display: flex;
+ line-height: 24px;
+ height: 24px !important;
+ max-width: unset !important;
+ min-height: unset !important;
+ }
+
+ .el-form-item__label {
+ height: 24px !important;
+ line-height: 24px !important;
+ max-width: unset !important;
+ min-height: unset !important;
+ }
+
+ .resetBtn {
+ width: unset !important;
+ height: 24px !important;
+ }
+
+ .addDocuType {
+ box-sizing: border-box;
+ padding: 4px 27px !important;
+
+ span {
+ min-width: unset !important;
+ }
+ }
+
+ .delAllCocuType {
+ box-sizing: border-box;
+ padding: 4px 15px !important;
+ margin-left: 8px !important;
+ }
+ }
+
+ .supAddCategoris {
+ width: 170px;
+ height: 24px;
+ margin-left: 8px;
+ font-size: 12px;
+ line-height: 22px;
+ color: rgb(141 152 170);
+ }
+}
+
+.analyticMethodSelect {
+ box-sizing: border-box;
+ background: #fefefe !important;
+ border-color: #07f !important;
+ .el-select-dropdown {
+ width: 100% !important;
+ max-width: unset !important;
+ }
+
+ .el-select-dropdown__item.is-hovering {
+ color: #fff;
+ background: #07f !important;
+ }
+}
+
+.create-dialog {
+ width: 560px;
+ height: 600px;
+ position: relative;
+ padding: 0 !important;
+ overflow: hidden;
+
+ .el-dialog__body {
+ height: 470px !important;
+ max-height: unset !important;
+ min-height: unset !important;
+ padding-left: 16px !important;
+ margin-right: 0 !important;
+ padding-bottom: 0;
+ }
+
+ .analyticMethod {
+ .el-popper {
+ inset: auto auto auto 0px !important;
+ }
+ }
+ ::-webkit-scrollbar {
+ width: 4px !important;
+ height: 8px;
+ background: transparent;
+ }
+
+ .config-size {
+ width: 111px;
+ }
+
+ .el-input-number__increase,
+ .el-input-number__decrease {
+ background: transparent;
+ .el-icon {
+ color: #8d98aa;
+ }
+ }
+
+ .el-select-dropdown__item.is-hovering {
+ color: #fff !important;
+ background: #07f;
+ width: 319px;
+ }
+
+ .kl-ops-btn {
+ height: 24px !important;
+ margin-top: 32px;
+ margin-bottom: 0;
+
+ .el-form-item__content {
+ display: flex;
+ justify-content: center;
+ width: 100% !important;
+ height: 24px !important;
+ min-height: unset !important;
+ margin-left: 0 !important;
+ line-height: 24px !important;
+ }
+
+ .resetBtn {
+ height: 24px !important;
+ }
+ }
+
+ .config-form {
+ .addDocuType {
+ padding: 4px 19px !important;
+ }
+ .delAllCocuType {
+ padding: 4px 7px !important;
+ }
+ }
+}
+
+.tip-dialog {
+ padding: 0 !important;
+
+ .el-dialog__body {
+ padding: 24px !important;
+ margin-right: 0;
+ font-size: 12px;
+ }
+
+ .tip-ops-btn {
+ display: flex;
+ justify-content: center;
+ width: 100%;
+ margin-top: 32px;
+
+ .resetBtn {
+ width: 64px;
+ height: 24px;
+ }
+ }
+}
+
+.kl-ops-btn {
+ margin-bottom: 0;
+}
+
+.kl-create-ops-btn {
+ position: absolute;
+ bottom: 24px;
+ left: 190px;
+}
+
+.assetIdClass {
+ label::before {
+ opacity: 0;
+ }
+}
+#asset-box-id {
+ .el-form-item__content {
+ width: 470px !important;
+ display: flex;
+ gap: 10px;
+ }
+ .copydocument {
+ cursor: pointer;
+ transform: rotateZ(180deg);
+ }
+ .copydocument:hover {
+ color: #0077ff;
+ }
+}
+
+.select-container {
+ .is-disabled {
+ .el-select__selected-item {
+ color: #bfc7d7 !important;
+ }
+ }
+}
+
+.analyticTipBox,
+.fileChunkSizeTip {
+ width: 376px !important;
+ max-width: unset !important;
+ min-width: unset !important;
+ padding: 8px !important;
+}
diff --git a/src/styles/knowledgeLibrary.scss b/src/styles/knowledgeLibrary.scss
new file mode 100644
index 0000000000000000000000000000000000000000..a3fdfba7eb3efed16667dfe09db259e2e0250b57
--- /dev/null
+++ b/src/styles/knowledgeLibrary.scss
@@ -0,0 +1,666 @@
+.knowledgeLibrary-container {
+ width: 100%;
+ height: calc(100vh - 300px);
+ padding: 0 24px 24px;
+ background: rgb(239 239 239);
+ min-width: 1240px;
+ .knowledgeLibrary-box {
+ box-sizing: border-box;
+ display: flex;
+ flex-direction: column;
+ width: 100%;
+ height: calc(100vh - 319px);
+ padding-bottom: 24px;
+ overflow-y: auto;
+ background: rgb(253 254 255);
+ border-radius: 4px;
+ transform: translateY(-5px);
+
+ .kl-tilte {
+ height: 24px;
+ margin-left: 24px;
+ margin-top: 24px;
+ font-size: 16px;
+ line-height: 24px;
+ color: rgb(0, 0, 0);
+ font-weight: 700;
+ }
+
+ .kl-ops {
+ display: flex;
+ justify-content: space-between;
+ width: 100%;
+ padding: 0 24px;
+ margin-top: 16px;
+
+ .kl-left-btn {
+ .createAsset,
+ .ImportAsset {
+ font-size: 12px;
+ font-weight: 500;
+ }
+
+ .createAsset {
+ padding: 8px 17.2px;
+ }
+
+ .ImportAsset {
+ padding: 8px 23.2px;
+ }
+
+ .el-button--primary {
+ background: rgb(0 119 255);
+ }
+ }
+
+ .kl-right-btn {
+ display: flex;
+ gap: 8px;
+
+ .kl-btn-search {
+ width: 400px;
+ height: 32px;
+ .el-input__icon {
+ font-size: 16px;
+ }
+ .el-input__inner {
+ font-size: 12px !important;
+ line-height: 16px;
+ }
+ .el-input__wrapper {
+ padding-right: 8px !important;
+ }
+ }
+
+ .kl-btn-switch {
+ box-sizing: border-box;
+ display: flex;
+ align-items: center;
+ width: 64px;
+ height: 32px;
+ border: 1px solid rgb(195 206 223);
+ border-radius: 2px;
+
+ .kl-btn-switch-icon {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 32px;
+ height: 32px;
+ cursor: pointer;
+ .el-icon {
+ color: #8d98aa;
+ font-size: 16px !important;
+ }
+ }
+
+ .bgThumb {
+ height: 32px;
+ background: rgb(0 119 255);
+
+ .el-icon {
+ color: white;
+ font-size: 16px !important;
+ }
+ }
+ }
+ }
+ }
+
+ .kl-card-box {
+ box-sizing: border-box;
+ width: 100%;
+ height: 100%;
+ padding: 0 16px 24px 24px;
+ margin-top: 16px;
+ overflow-y: scroll;
+ }
+
+ .kl-card {
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: space-between;
+ .kl-single-card {
+ display: flex;
+ flex-direction: column;
+ height: 302px;
+ padding: 24px;
+ cursor: pointer;
+ background: rgb(244 246 250);
+ border-radius: 4px;
+
+ .kl-card-top {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+
+ .kl-card-name {
+ width: 90%;
+ height: 24px;
+ font-size: 18px;
+ font-weight: 700;
+ line-height: 24px;
+ }
+
+ .kl-card-more-icon {
+ cursor: pointer;
+ }
+ }
+
+ .kl-card-desc {
+ flex: 1;
+ padding-top: 16px;
+ font-size: 14px;
+ line-height: 22px;
+ color: rgb(141 152 170);
+ }
+
+ .kl-card-footer {
+ display: flex;
+ gap: 16px;
+ align-items: center;
+ color: rgb(78 88 101);
+ width: 100%;
+ margin-bottom: 8px;
+ .el-icon {
+ font-size: 16px;
+ }
+
+ .kl-card-file-icon {
+ display: flex;
+ gap: 4px;
+ align-items: center;
+ .kl-card-file {
+ display: flex;
+ width: 90%;
+ font-size: 14px;
+ .kl-file-text {
+ width: 95%;
+ display: inline-block;
+ }
+ }
+
+ .kl-file-num {
+ font-size: 14px;
+ font-family: "HarmonyOS Sans SC Bold";
+ }
+ }
+
+ .kl-card-timer-icon {
+ text-align: right;
+ display: flex;
+ gap: 4px;
+ width: 45%;
+ align-items: center;
+ font-size: 14px;
+ .kl-card-timer {
+ width: 90%;
+ }
+ }
+ }
+
+ .kl-card-id {
+ width: 330px !important;
+ .id-label,
+ .id-value {
+ font-size: 14px;
+ letter-spacing: 0;
+ color: #575d6c;
+ }
+ .id-label {
+ font-family: "HarmonyOS Sans SC Bold";
+ }
+ }
+ }
+ }
+
+ @media screen and (width <= 1560px) {
+ .kl-card-container {
+ display: grid;
+ grid-template-columns: repeat(auto-fill, 350px);
+ grid-gap: 16px;
+ }
+ }
+
+ @media screen and (width >= 1560px) {
+ .kl-card-container {
+ display: grid;
+ grid-template-columns: repeat(auto-fill, 350px);
+ grid-gap: 16px;
+ }
+ }
+
+ .pageNoData {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ height: 100%;
+ font-size: 12px;
+ color: rgb(78 88 101);
+ }
+ }
+
+ .knowledgeLibrayList {
+ padding-bottom: unset !important;
+ }
+ .kl-table-box {
+ padding: 16px 24px 24px;
+ height: 100%;
+ display: flex;
+ flex-direction: column;
+ gap: 24px;
+ min-height: 200px;
+ .el-checkbox__inner::before {
+ top: 4.5px !important;
+ width: 13px;
+ }
+
+ tbody {
+ td {
+ border-right: unset !important;
+ }
+ }
+ .el-table.is-scrolling-left.el-table--border
+ .el-table-fixed-column--left.is-last-column.el-table__cell {
+ border-right: unset !important;
+ }
+
+ .el-table__header {
+ width: 100% !important;
+
+ height: 32px;
+ box-shadow: inset 0 -1px 0 0 rgb(223 229 239);
+
+ thead tr th {
+ background-color: #f4f6fa;
+ }
+ }
+
+ .kl-name-row {
+ color: #0077ff;
+ font-size: 12px;
+ font-weight: 500;
+ cursor: pointer;
+ }
+
+ .kl-id {
+ .el-icon {
+ color: #8d98aa;
+ }
+ }
+
+ .el-table__body {
+ width: 100% !important;
+ .el-table__row {
+ height: 48px;
+ }
+ }
+
+ .el-table__cell {
+ padding: 0 !important;
+ font-size: 12px;
+ }
+
+ .el-table--border .el-table__cell:first-child .cell {
+ padding: 0 12px !important;
+ }
+
+ .el-table-column--selection .cell {
+ padding-right: 0 !important;
+ padding-left: 22px;
+ }
+
+ .kl-selection::after {
+ content: unset !important;
+ }
+
+ .el-pagination {
+ margin-top: 0;
+ }
+
+ .el-pagination .el-input__inner {
+ height: var(--el-input-inner-height) !important;
+ }
+ }
+
+ .o-export-progress-notify {
+ position: fixed;
+ right: 24px;
+ bottom: 24px;
+ z-index: 1;
+ width: 400px;
+ overflow: hidden;
+ background-color: var(--o-bg-color-base);
+ border-color: var(--o-bg-color-base);
+ border-radius: var(--o-border-radius);
+ box-shadow: var(--o-box-shadow);
+
+ .o-export-notify__head {
+ position: relative;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ height: 56px;
+ padding: 4px 16px;
+ font-size: var(--o-font-size-text);
+ line-height: var(--o-line-height-text);
+ color: var(--o-text-color-primary);
+ background-color: var(--o-bg-color-light);
+
+ .task-list {
+ font-size: 16px;
+ font-weight: 700;
+ line-height: 24px;
+ }
+
+ .nofity-show {
+ display: flex;
+ align-items: center;
+ width: 20px;
+ height: 100%;
+ }
+ }
+
+ .o-export-notify__body {
+ padding: 8px 16px;
+ background-color: var(--o-bg-color-light);
+ }
+
+ .o-export-notify__list {
+ display: flex;
+ flex-direction: column;
+ gap: 16px;
+ max-height: 500px;
+ overflow-y: auto;
+
+ .item {
+ max-height: 112px;
+ padding: 16px;
+ padding-bottom: 12px;
+ background: rgb(253 254 255);
+ border-radius: 2px;
+ .el-progress__text {
+ min-width: 10px;
+ }
+ }
+
+ .item-box {
+ display: flex;
+ justify-content: space-between;
+ margin-bottom: 8px;
+ font-size: 12px;
+ font-weight: 600;
+ color: rgb(0 0 0);
+ }
+
+ .item-info {
+ display: flex;
+ }
+
+ .item-close {
+ width: 16px;
+ height: 16px;
+ cursor: pointer;
+ }
+
+ .item-name {
+ max-width: 240px;
+ font-size: 12px;
+ font-weight: 700;
+ flex: 1;
+ .item-name-text {
+ font-size: 12px;
+ }
+ }
+
+ .item-file-size {
+ max-width: 60px;
+ }
+
+ .taskStatusPer {
+ margin-top: 8px;
+ }
+
+ .waitExport,
+ .packData {
+ display: flex;
+ gap: 4px;
+ align-items: center;
+ height: 32px;
+ font-family: "HarmonyOS Sans SC Regular", sans-serif !important;
+ font-size: 12px;
+ font-weight: 600;
+
+ .el-icon {
+ font-size: 14px;
+ }
+ }
+
+ @keyframes rotate-img {
+ from {
+ transform: rotate(0);
+ }
+
+ to {
+ transform: rotate(360deg);
+ }
+ }
+
+ .icon-loading {
+ height: 16px;
+ width: 16px;
+ background-repeat: no-repeat !important;
+ background-size: 100% !important;
+ display: inline-block;
+ background: url("/src/assets/icons/taskLoading.png");
+ }
+
+ .icon-box {
+ animation: rotate-img 0.8s infinite linear;
+ }
+
+ .errorIcon {
+ width: 16px;
+ height: 16px;
+
+ path {
+ color: rgb(228 33 33) !important;
+ }
+ }
+
+ .successIcon {
+ width: 14px;
+ height: 14px;
+
+ path {
+ color: rgb(36 171 54) !important;
+ }
+ }
+
+ .successTask {
+ margin-left: 18px;
+ font-size: 12px;
+ color: rgb(0 119 255);
+ cursor: pointer;
+ }
+
+ .opsExportTask {
+ margin-bottom: 24px;
+ }
+
+ .errorRestart {
+ font-size: 12px;
+ color: rgb(0 119 255);
+ cursor: pointer;
+ }
+
+ .errorReson {
+ margin-left: 18px;
+ font-size: 12px;
+ color: rgb(141 152 170);
+ }
+
+ .errorTask {
+ display: flex;
+ gap: 4px;
+ }
+
+ .upload-success,
+ .upload-error {
+ display: flex;
+ gap: 6px;
+ align-items: center;
+ margin-top: 6px;
+ font-size: 12px;
+ color: rgb(228 33 33);
+
+ .el-icon {
+ font-size: 14px;
+
+ path {
+ fill: rgb(228 33 33);
+ }
+ }
+ }
+
+ .upload-restart {
+ color: rgb(0 119 255);
+ cursor: pointer;
+ }
+ }
+
+ .item-all-close {
+ width: 100%;
+ margin-top: 16px;
+ margin-bottom: 8px;
+ font-size: 12px;
+ font-weight: 700;
+ color: rgb(0 119 255);
+ text-align: right;
+ cursor: pointer;
+ }
+
+ .o-export-notify__close {
+ position: absolute;
+ right: 16px;
+ font-size: var(--o-font-size-body);
+ color: var(--o-text-color-secondary);
+ cursor: pointer;
+
+ &:hover {
+ color: var(--o-text-color-primary);
+ }
+ }
+ }
+}
+
+.upload-dialog {
+ width: 560px;
+ padding: 0 !important;
+}
+
+.upload-drag {
+ color: rgb(78, 88, 101);
+ font-size: 12px;
+}
+
+.upload-tip-text {
+ width: 480px;
+}
+
+.chooseFileBtn {
+ padding: 4px 8px;
+}
+
+.tip-dialog {
+ .delTip {
+ display: flex;
+ gap: 17px;
+ align-items: center;
+ }
+
+ .iconAlarmOrange {
+ svg {
+ width: 28px;
+ height: 24px;
+ }
+ }
+}
+
+.delTipDialog {
+ .el-dialog__header {
+ height: 56px !important;
+ }
+ .el-dialog__body {
+ height: 128px !important;
+ }
+ .delTip {
+ height: 24px !important;
+ }
+}
+
+.asset-custom-header {
+ display: flex;
+ gap: 4px;
+ align-items: center;
+
+ .searchIconIsActive {
+ color: #0077ff !important;
+ }
+
+ .el-icon {
+ font-size: 16px;
+ color: #8d98aa;
+ }
+
+ .el-icon:hover {
+ color: #0077ff;
+ }
+
+ svg {
+ width: 16px;
+ height: 16px;
+ }
+}
+
+.asset-upload-time-cell .cell {
+ display: flex;
+ align-items: center;
+}
+.asset-id-custom-header {
+ display: flex;
+ gap: 4px;
+ align-items: center;
+}
+.asset-id-custom-header svg {
+ width: 16px;
+ height: 16px;
+}
+.asset-id-custom-header .el-icon {
+ font-size: 16px;
+}
+.searchIconIsActive {
+ color: #0077ff !important;
+}
+
+.delToolTip {
+ display: inline-block;
+ max-width: 150px;
+ line-height: 12px;
+}
+
+.delTipText {
+ display: inline-block;
+ width: 300px;
+}
+
+.timePng,
+.filePng {
+ width: 16px;
+ height: 16px;
+}
+.assetDro {
+ .el-dropdown-menu {
+ padding: 4px 0 !important;
+ }
+}
diff --git a/src/styles/login.scss b/src/styles/login.scss
new file mode 100644
index 0000000000000000000000000000000000000000..843fc5540ab7f71027a056c47dd107cd9a20d889
--- /dev/null
+++ b/src/styles/login.scss
@@ -0,0 +1,96 @@
+.login-container {
+ width: 100%;
+ min-width: 550px;
+ height: calc(100vh - 42px);
+
+ .login-card {
+ position: absolute;
+ top: 19%;
+ right: 7.7%;
+ width: 456px;
+ min-height: 544px;
+ padding: 48px;
+ border: none;
+ border-radius: 4px;
+ box-shadow: 0 4px 16px 8px rgb(0 0 0 / 10%) !important;
+
+ .el-card__body {
+ padding: 0;
+ height: 412px;
+ }
+
+ .input-wrapper {
+ display: flex;
+ align-items: center;
+ width: 100%;
+ }
+
+ .captcha-image {
+ height: 48px;
+ cursor: pointer;
+ border-top-right-radius: 6px;
+ border-bottom-right-radius: 6px;
+ }
+
+ .platform-login-text {
+ font-size: 12px;
+ color: var(--el-text-color-secondary);
+ }
+
+ .password-from,
+ .username-from {
+ margin-top: 24px;
+ margin-bottom: unset !important;
+ .el-input__inner {
+ font-size: 16px !important;
+ color: #000000;
+ }
+ }
+
+ .login-title {
+ margin-top: 8px;
+ margin-bottom: 48px;
+ font-size: 40px;
+ font-weight: 700;
+ line-height: 48px;
+ text-align: left;
+ letter-spacing: 0.83px !important;
+ }
+
+ .login-btn {
+ height: 48px;
+ margin-top: 124px;
+ font-size: 16px;
+ font-weight: 500;
+ background-color: rgb(0 119 255);
+ border-radius: 2px;
+ span {
+ font-size: 16px;
+ }
+ }
+ }
+
+ .icp-info {
+ position: absolute;
+ bottom: 32px;
+ width: 100%;
+ font-size: 14px;
+ color: var(--el-text-color-secondary);
+ text-align: center;
+ }
+
+ .el-input-wrapper {
+ background: var(--el-input-bg-color) !important;
+ border: 1px solid var(--el-border-color);
+ border-radius: 5px;
+ }
+
+ .el-input__wrapper {
+ height: 48px !important;
+ }
+
+ .el-form-item {
+ background: var(--el-input-bg-color);
+ border-radius: 5px;
+ }
+}
diff --git a/src/styles/reset.scss b/src/styles/reset.scss
new file mode 100644
index 0000000000000000000000000000000000000000..e2c0850a31b44b2e8de2658a7f31a9e2ba2a120c
--- /dev/null
+++ b/src/styles/reset.scss
@@ -0,0 +1,870 @@
+@font-face {
+ font-family: "HarmonyOS Sans SC Thin";
+ src:
+ url(./HarmonyOS_Sans_SC/HarmonyOS_Sans_SC_Thin.woff2) format("woff2"),
+ url(./HarmonyOS_Sans_SC/HarmonyOS_Sans_SC_Thin.woff) format("woff");
+ font-weight: 100;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: "HarmonyOS Sans SC Light";
+ src:
+ url(./HarmonyOS_Sans_SC/HarmonyOS_Sans_SC_Light.woff2) format("woff2"),
+ url(./HarmonyOS_Sans_SC/HarmonyOS_Sans_SC_Light.woff) format("woff");
+ font-weight: 300;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: "HarmonyOS Sans SC Regular";
+ src:
+ url(./HarmonyOS_Sans_SC/HarmonyOS_Sans_SC_Regular.woff2) format("woff2"),
+ url(./HarmonyOS_Sans_SC/HarmonyOS_Sans_SC_Regular.woff) format("woff");
+ font-weight: 400;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: "HarmonyOS Sans SC Medium";
+ src:
+ url(./HarmonyOS_Sans_SC/HarmonyOS_Sans_SC_Medium.woff2) format("woff2"),
+ url(./HarmonyOS_Sans_SC/HarmonyOS_Sans_SC_Medium.woff) format("woff");
+ font-weight: 500;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: "HarmonyOS Sans SC Bold";
+ src:
+ url(./HarmonyOS_Sans_SC/HarmonyOS_Sans_SC_Bold.woff2) format("woff2"),
+ url(./HarmonyOS_Sans_SC/HarmonyOS_Sans_SC_Bold.woff) format("woff");
+ font-weight: 700;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: "HarmonyOS Sans SC Black";
+ src:
+ url(./HarmonyOS_Sans_SC/HarmonyOS_Sans_SC_Black.woff2) format("woff2"),
+ url(./HarmonyOS_Sans_SC/HarmonyOS_Sans_SC_Black.woff) format("woff");
+ font-weight: 900;
+ font-style: normal;
+}
+
+/* 鸿蒙西文字体 */
+@font-face {
+ font-family: "HarmonyOS Sans En Thin";
+ src:
+ url(./HarmonyOS_Sans/HarmonyOS_Sans_Thin.woff2) format("woff2"),
+ url(./HarmonyOS_Sans/HarmonyOS_Sans_Thin.woff) format("woff");
+ font-weight: 100;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: "HarmonyOS Sans En Light";
+ src:
+ url(./HarmonyOS_Sans/HarmonyOS_Sans_Light.woff2) format("woff2"),
+ url(./HarmonyOS_Sans/HarmonyOS_Sans_Light.woff) format("woff");
+ font-weight: 300;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: "HarmonyOS Sans En Regular";
+ src:
+ url(./HarmonyOS_Sans/HarmonyOS_Sans_Regular.woff2) format("woff2"),
+ url(./HarmonyOS_Sans/HarmonyOS_Sans_Regular.woff) format("woff");
+ font-weight: 400;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: "HarmonyOS Sans En Medium";
+ src:
+ url(./HarmonyOS_Sans/HarmonyOS_Sans_Medium.woff2) format("woff2"),
+ url(./HarmonyOS_Sans/HarmonyOS_Sans_Medium.woff) format("woff");
+ font-weight: 500;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: "HarmonyOS Sans En Bold";
+ src:
+ url(./HarmonyOS_Sans/HarmonyOS_Sans_Bold.woff2) format("woff2"),
+ url(./HarmonyOS_Sans/HarmonyOS_Sans_Bold.woff) format("woff");
+ font-weight: 700;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: "HarmonyOS Sans En Black";
+ src:
+ url(./HarmonyOS_Sans/HarmonyOS_Sans_Black.woff2) format("woff2"),
+ url(./HarmonyOS_Sans/HarmonyOS_Sans_Black.woff) format("woff");
+ font-weight: 900;
+ font-style: normal;
+}
+
+::before,
+::after {
+ box-sizing: border-box;
+ border-color: currentcolor;
+ border-style: solid;
+ border-width: 0;
+}
+
+#app {
+ width: 100%;
+ height: 100%;
+}
+
+html,
+body {
+ box-sizing: border-box;
+ width: 100%;
+ min-width: 600px;
+ height: 100%;
+ line-height: 1.5;
+ tab-size: 4;
+ text-size-adjust: 100%;
+}
+
+:root {
+ --el-font-family: "HarmonyOS Sans SC Medium", -apple-system,
+ blinkmacsystemfont, "Segoe UI", roboto, "Helvetica Neue", arial, "Noto Sans",
+ sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol",
+ "Noto Color Emoji" !important;
+}
+
+html,
+body,
+input,
+button,
+.is-selected {
+ margin: 0;
+ font-family:
+ "HarmonyOS Sans SC Medium",
+ -apple-system,
+ BlinkMacSystemFont,
+ "Segoe UI",
+ Roboto,
+ "Helvetica Neue",
+ Arial,
+ "Noto Sans",
+ sans-serif,
+ "Apple Color Emoji",
+ "Segoe UI Emoji",
+ "Segoe UI Symbol",
+ "Noto Color Emoji" !important;
+ line-height: inherit;
+ -moz-osx-font-smoothing: grayscale;
+ -webkit-font-smoothing: antialiased;
+ text-rendering: optimizelegibility;
+}
+
+a {
+ color: inherit;
+ text-decoration: inherit;
+}
+
+img,
+svg {
+ display: inline-block;
+}
+
+svg {
+ // 因icon大小被设置为和字体大小一致,而span等标签的下边缘会和字体的基线对齐,故需设置一个往下的偏移比例,来纠正视觉上的未对齐效果
+ vertical-align: -0.15em;
+}
+
+ul,
+li {
+ padding: 0;
+ margin: 0;
+ list-style: none;
+}
+
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+ padding: 0;
+ margin: 0;
+}
+
+.el-button {
+ border-radius: 2px !important;
+}
+
+.el-button span {
+ justify-content: center;
+ font-size: 12px;
+}
+
+.el-button--primary {
+ background: rgb(0 119 255) !important;
+}
+
+*,
+*::before,
+*::after {
+ box-sizing: inherit;
+}
+
+a,
+a:focus,
+a:hover {
+ color: inherit;
+ text-decoration: none;
+ cursor: pointer;
+}
+
+a:focus,
+a:active,
+div:focus {
+ outline: none;
+}
+
+::-webkit-scrollbar {
+ width: 8px;
+ height: 8px;
+ background: transparent;
+}
+
+::-webkit-scrollbar-track {
+ background: transparent;
+ border-radius: 10px;
+}
+
+::-webkit-scrollbar-corner {
+ background: transparent;
+}
+
+::-webkit-scrollbar-thumb {
+ background: #c3cedf;
+ border-radius: 4px;
+}
+
+::-webkit-scrollbar-thumb:hover {
+ background: #bfc7d7 !important;
+ background-color: #bfc7d7 !important;
+ border: 0;
+ opacity: 1;
+}
+
+.el-scrollbar .el-scrollbar__bar .el-scrollbar__thumb {
+ background: #c3cedf !important;
+ opacity: 1;
+}
+
+.resetBtn {
+ width: 64px;
+
+ span {
+ font-size: 12px;
+ }
+}
+
+.el-dialog__header {
+ .el-dialog__title {
+ font-size: 16px;
+ font-weight: 700;
+ color: rgb(0 0 0);
+ }
+}
+
+.dropdown-container {
+ margin-top: -10px;
+
+ .el-dropdown-menu__item:not(.is-disabled):hover {
+ color: rgb(255 255 255);
+ background: rgb(82 163 255);
+ }
+}
+
+.el-button:focus-visible {
+ outline: unset !important;
+}
+
+.el-textarea__inner,
+.el-input__wrapper,
+.el-select__wrapper {
+ padding: 8px 16px !important;
+}
+
+.el-input__wrapper,
+.el-select__wrapper {
+ height: 32px !important;
+}
+
+.el-table__column-filter-trigger {
+ line-height: 16px;
+}
+
+.filterPopper {
+ display: flex;
+ flex-direction: column;
+ width: 168px !important;
+ padding: 8px 16px 16px !important;
+ background: rgb(253 254 255) !important;
+ transform: translateY(-10px);
+
+ .el-checkbox-group {
+ .el-checkbox {
+ margin-right: 0;
+ }
+ }
+
+ .el-checkbox__inner::before {
+ top: 4.5px !important;
+ width: 13px !important;
+ }
+
+ .el-checkbox__label {
+ width: 120px;
+ font-size: 12px;
+ }
+
+ .el-checkbox__input.is-checked + .el-checkbox__label {
+ color: rgb(78 88 101);
+ }
+
+ .el-checkbox__inner {
+ box-sizing: border-box;
+ border-color: rgb(141 152 170) !important;
+ border-radius: 1px;
+ }
+
+ .el-checkbox:hover:not(.is-disabled) .el-checkbox__inner {
+ box-sizing: border-box;
+ border-color: rgb(208 212 220) !important;
+ border-radius: 1px;
+ }
+
+ .is-checked {
+ border: unset !important;
+ }
+}
+.form-right-tip {
+ color: rgb(141, 152, 170);
+ font-size: 12px;
+}
+.kbLibraryPage {
+ .el-select-dropdown__item.is-hovering {
+ color: white;
+ background-color: var(--o-select-dropdown-bg-color_hover) !important;
+ }
+}
+
+.o-message--error {
+ width: 544px;
+ background-color: var(--o-message-bg-color_error) !important;
+ border-color: var(--o-message-border-color_error) !important;
+ .el-message__content {
+ flex: 1;
+ }
+ .el-icon {
+ position: relative !important;
+ top: unset !important;
+ }
+}
+
+.el-message--info {
+ height: 48px !important;
+}
+
+.el-message__icon {
+ font-size: 16px !important;
+ margin-right: unset !important;
+}
+
+.el-message__content {
+ font-size: 12px !important;
+}
+
+.o-message--success {
+ width: 544px;
+ background-color: #c2e7c7 !important;
+ border-color: #24ab36 !important;
+ .el-message__content {
+ flex: 1;
+ }
+ .el-icon {
+ position: relative !important;
+ top: unset !important;
+ }
+}
+
+.el-dialog__headerbtn {
+ height: 57px !important;
+ .el-dialog__close {
+ font-size: 20px !important;
+ }
+}
+
+.el-table__empty-block {
+ margin-top: unset !important;
+ box-shadow: inset 0px -1px 0px 0px rgb(223, 229, 239);
+}
+
+.el-select-dropdown__item {
+ font-family: "HarmonyOS Sans SC Medium" !important;
+ font-size: 12px;
+ font-weight: unset !important;
+}
+
+.model-dialog,
+.create-dialog,
+.edit-dialog {
+ .el-form-item__content {
+ button.is-disabled {
+ background: #b8d9ff !important;
+ border: unset;
+ span {
+ color: #fff !important;
+ }
+ }
+ }
+}
+
+.upload-ops-btn {
+ button.is-disabled {
+ background: #b8d9ff !important;
+ border: unset;
+ }
+}
+
+.caret-wrapper {
+ margin-left: 0 !important;
+ transform: translateX(-3px);
+}
+
+.removeIsTrans {
+ color: #a8abb2 !important;
+}
+
+.el-pagination {
+ .el-pagination__total {
+ margin-right: unset;
+ }
+ .el-pagination__sizes {
+ margin-left: 7px;
+ margin-right: unset;
+ }
+ .btn-prev {
+ margin-left: 8px !important;
+ }
+ .btn-next {
+ margin-right: 8px !important;
+ }
+ .el-pagination__jump {
+ margin-left: unset;
+ }
+ .el-pagination__goto {
+ margin-right: unset;
+ }
+ .el-pagination__classifier {
+ margin-left: unset;
+ }
+}
+
+.el-icon--caretup {
+ color: #0077ff !important;
+}
+
+.downBtn {
+ border: 1px solid var(--el-button-border-color) !important;
+ color: #606266 !important;
+}
+
+.el-pagination {
+ .el-select {
+ width: 100px !important;
+ }
+ .el-input {
+ width: 40px !important;
+ }
+
+ button:disabled .el-icon {
+ color: #8d98aa !important;
+ }
+}
+
+.cancelBtn {
+ margin-left: 8px !important;
+}
+
+.el-message__closeBtn {
+ color: #8d98aa !important;
+}
+
+.el-select__suffix {
+ .el-icon {
+ font-size: 16px;
+ }
+}
+
+.el-dialog__headerbtn {
+ width: unset !important;
+ margin-right: 24px;
+ .el-dialog__close {
+ color: #8d98aa !important;
+ }
+}
+
+.custom-header,
+.asset-custom-header {
+ .el-date-editor--datetimerange {
+ width: 1px !important;
+ height: 1px !important;
+ padding: 0 !important;
+ overflow: hidden;
+ margin-top: 10px;
+ opacity: 0;
+ }
+}
+
+.asset-custom-header {
+ .el-date-editor--datetimerange {
+ width: 1px !important;
+ height: 1px !important;
+ padding: 0 !important;
+ overflow: hidden;
+ margin-top: 10px;
+ opacity: 0;
+ }
+}
+
+.assetTimeFilterPo {
+ width: unset !important;
+ min-width: unset !important;
+ padding: unset !important;
+ opacity: 0;
+}
+
+.el-pagination button {
+ padding: 0 !important;
+ width: 28px !important;
+ min-width: unset !important;
+}
+
+.el-pagination .btn-next .el-icon,
+.el-pagination .btn-prev .el-icon {
+ font-size: 14px !important;
+}
+
+.el-pager .number {
+ color: rgb(78, 88, 101);
+ font-size: 12px;
+}
+
+:is([role="option"]) {
+ font-size: 12px !important;
+}
+.datetimerangeClass {
+ width: 586px !important;
+ height: 380px;
+ margin-right: -12px;
+
+ .el-picker-panel__sidebar {
+ width: 104px !important;
+ padding-top: 4px !important;
+ }
+
+ .el-picker-panel {
+ width: 100% !important;
+ }
+
+ .el-picker-panel__body-wrapper {
+ height: 345px !important;
+ }
+
+ .el-picker-panel__body {
+ min-width: unset !important;
+ height: 345px;
+ margin-left: 104px !important;
+
+ .el-picker-panel__content {
+ height: 300px !important;
+ padding: 8px !important;
+
+ tbody tr {
+ height: 32px;
+ border: unset !important;
+ }
+
+ th {
+ height: 32px !important;
+ padding: 0 !important;
+ color: rgb(191 199 215);
+ border: unset !important;
+ }
+
+ th::after {
+ content: unset !important;
+ }
+
+ tbody {
+ tr:first-child {
+ margin-bottom: 8px;
+ }
+ }
+
+ tbody:has(.el-date-table__row) {
+ .el-date-table__row {
+ margin-bottom: 4px;
+ td {
+ width: 32px !important;
+ height: 32px !important;
+ padding: 0 !important;
+
+ .el-date-table-cell {
+ width: 32px !important;
+ height: 32px !important;
+ padding: 0 !important;
+
+ .el-date-table-cell__text {
+ width: 32px !important;
+ height: 32px !important;
+ line-height: 32px !important;
+ border-radius: 2px !important;
+ }
+ }
+ }
+
+ .start-date,
+ .end-date {
+ .el-date-table-cell__text {
+ background: rgb(0 119 255);
+ }
+ }
+
+ .in-range {
+ .el-date-table-cell__text {
+ color: rgb(255 255 255) !important;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ .el-date-range-picker__header {
+ height: 32px;
+ padding: 8px !important;
+ margin-bottom: 8px;
+
+ button {
+ margin-top: 0 !important;
+ }
+ }
+
+ .el-date-range-picker__time-header {
+ .el-icon {
+ margin: 0 12px !important;
+ font-size: 8px !important;
+ svg {
+ display: none;
+ }
+ }
+
+ .el-icon::after {
+ display: block;
+ width: 8px;
+ height: 1px;
+ content: "";
+ background-color: rgb(223 229 239);
+ }
+
+ .el-input--small .el-input__inner {
+ font-size: 12px !important;
+ }
+ }
+
+ .el-picker-panel__footer {
+ display: flex;
+ flex-direction: row-reverse;
+ gap: 16px;
+ justify-content: end;
+ padding-right: 24px !important;
+ }
+
+ .el-time-panel {
+ left: -70px;
+ }
+
+ .is-plain {
+ color: #07f;
+ }
+
+ .el-picker-panel__footer:has(.is-disabled) {
+ .is-plain {
+ color: #a8abb2 !important;
+ }
+ }
+}
+.datetimerangeClass {
+ .el-picker-panel__sidebar {
+ height: 378px;
+ }
+ .el-picker-panel__shortcut {
+ font-size: 12px;
+ line-height: 32px !important;
+ padding-left: 16px !important;
+ }
+ .el-picker-panel__body {
+ .el-input {
+ width: 100px !important;
+ .el-input__wrapper {
+ height: 24px !important;
+ }
+ }
+ }
+
+ .el-picker-panel__body-wrapper {
+ height: 345px !important;
+ }
+
+ .el-date-range-picker__time-header {
+ display: flex;
+ padding: 2px 16px 8px !important;
+ .el-input--small .el-input__inner {
+ font-size: 12px !important;
+ }
+ }
+
+ .el-date-range-picker__header {
+ width: 224px !important;
+ line-height: 16px !important;
+ button {
+ display: flex;
+ height: 16px;
+ align-items: center;
+ }
+ div {
+ width: 120px !important;
+ margin-left: 45px !important;
+ }
+ }
+
+ .el-picker-panel__content {
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ }
+ .el-date-range-picker__editors-wrap {
+ display: flex;
+ gap: 8px;
+ }
+ .el-date-range-picker__time-picker-wrap {
+ padding: 0 0px !important;
+ }
+}
+
+.timeFilterPo {
+ max-width: unset !important;
+ width: 0 !important;
+ height: 0 !important;
+ padding: 0 !important;
+ opacity: 0;
+ .el-radio.is-checked .el-radio__inner {
+ background-color: var(--o-radio-bg-color_checked_hover);
+ border-color: var(--o-radio-border-color_checked_hover);
+ }
+ .el-picker-panel__body-wrapper {
+ overflow: unset !important;
+ }
+ .el-picker-panel__footer {
+ padding-right: 24px;
+ width: 400px;
+ padding-top: 3px !important;
+ border: unset !important;
+ margin-left: 197px;
+ }
+
+ .el-picker-panel__shortcut {
+ font-size: 12px;
+ }
+
+ .el-picker-panel__body {
+ border-bottom: 1px solid #e4e7ed;
+ }
+
+ .el-picker-panel__sidebar {
+ height: 378px;
+ border: 1px solid #e4e7ed !important;
+ }
+
+ .customTimeBtn {
+ display: flex;
+ gap: 8px;
+ align-items: center;
+ font-size: 12px;
+ color: rgb(78 88 101);
+ }
+
+ .el-radio__inner::after {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ width: 8px;
+ height: 8px;
+ content: "";
+ background-color: var(--el-color-white);
+ border-radius: var(--el-radio-input-border-radius);
+ transition: transform 0.15s ease-in;
+ transform: translate(-50%, -50%) scale(0);
+ }
+
+ .config-size {
+ width: 104px !important;
+ }
+
+ .el-input-number__increase,
+ .el-input-number__decrease {
+ background: transparent;
+ .el-icon {
+ color: #8d98aa;
+ }
+ }
+
+ .filter-btn {
+ display: flex;
+ justify-content: center;
+ }
+
+ .is-checked .el-radio__label {
+ color: rgb(78 88 101) !important;
+ }
+}
+
+.el-select__popper {
+ .el-select-dropdown__list {
+ padding: 4px 0 !important;
+ li {
+ height: 32px !important;
+ line-height: 30px !important;
+ }
+ }
+
+ .el-select-dropdown__item {
+ padding: 0 16px;
+ }
+}
+
+.el-select-dropdown__item.is-selected {
+ color: #0077ff;
+ span {
+ color: #0077ff;
+ }
+}
+.el-select-dropdown__item.is-hovering {
+ span {
+ color: #fff !important;
+ }
+}
diff --git a/src/styles/upload.scss b/src/styles/upload.scss
new file mode 100644
index 0000000000000000000000000000000000000000..4818025ccdcd1a564a3098b440c49637f7237c18
--- /dev/null
+++ b/src/styles/upload.scss
@@ -0,0 +1,223 @@
+.upload-dialog {
+ .el-dialog__body {
+ max-height: unset !important;
+ }
+
+ .upload-to-list {
+ .list-action {
+ display: flex;
+
+ .file-ops {
+ height: 24px;
+ padding: 4px 8px;
+ font-size: 12px;
+ }
+
+ .delFileBtn {
+ height: 24px;
+ padding: 4px 20px;
+ font-size: 12px;
+
+ span {
+ min-width: unset !important;
+ }
+ }
+ }
+
+ .list-tip {
+ margin: 8px 0;
+ font-size: var(--o-font-size-info);
+ line-height: var(--o-line-height-info);
+ }
+
+ &.has-files {
+ .upload-block {
+ height: 184px;
+ }
+
+ .el-table__header .cell {
+ color: rgb(78 88 101);
+ }
+
+ .el-table__body .cell {
+ color: rgb(0 0 0);
+ }
+
+ .el-alert--info {
+ align-items: start;
+ max-height: 48px;
+ margin-bottom: 16px;
+ background-color: rgb(184 217 255) !important;
+
+ .el-alert__content {
+ padding-right: 0 !important;
+ }
+
+ .el-alert__title {
+ font-size: 12px;
+ line-height: 16px;
+ }
+ }
+
+ .el-upload-dragger {
+ border: unset !important;
+ }
+
+ .el-table__cell {
+ padding: 0 !important;
+ }
+
+ .el-table-column--selection .cell {
+ padding-right: 0 !important;
+ padding-left: 18px;
+ }
+
+ .upload-file-name .cell {
+ padding-left: 0 !important;
+ }
+
+ .upload-file-selection::after {
+ content: unset !important;
+ }
+
+ .upload-ops-btn {
+ display: flex;
+ justify-content: center;
+ width: 100%;
+ margin-top: 32px;
+
+ .el-button {
+ height: 24px;
+ }
+
+ .el-button span {
+ justify-content: center;
+ }
+ }
+ }
+ }
+
+ .upload-block {
+ position: relative;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ height: 264px;
+ overflow: hidden;
+ cursor: pointer;
+
+ .upload-drag-mask {
+ position: absolute;
+ inset: 0;
+ z-index: 1;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ pointer-events: none;
+ opacity: 0;
+ transition: opacity 0.3s;
+
+ .upload-tip {
+ color: var(--o-text-color-secondary);
+ }
+
+ &::before {
+ position: absolute;
+ inset: 0;
+ z-index: -1;
+ content: "";
+ background-color: rgb(235 239 246);
+ opacity: 0.9;
+ }
+ }
+ }
+
+ .upload-add {
+ .upload-btn-icon {
+ font-size: 64px !important;
+ }
+ }
+
+ .is-dragover {
+ opacity: 1;
+
+ .upload-drag-mask {
+ opacity: 1;
+ }
+ }
+
+ .upload-btn-icon {
+ font-size: var(--o-font-size-large);
+ color: var(--o-text-color-tertiary);
+ }
+
+ .upload-tip {
+ width: 100%;
+ font-size: var(--o-font-size-info);
+ line-height: var(--o-line-height-info);
+ color: var(--o-text-color-tertiary);
+
+ .el-button--primary {
+ height: 24px;
+ }
+
+ + .upload-tip {
+ margin-top: 24px;
+ }
+ }
+
+ .upload-preview {
+ width: 100%;
+ height: 184px;
+ cursor: default;
+ background-color: var(--o-bg-color-base);
+ .cell {
+ font-size: 12px !important;
+ }
+ .el-table {
+ ::-webkit-scrollbar {
+ width: 4px !important;
+ }
+ .el-scrollbar__bar.is-vertical {
+ width: 4px !important;
+ }
+ }
+ }
+
+ .upload-btns {
+ position: absolute;
+ inset: 0;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ background-color: var(--o-bg-color-mask);
+ opacity: 0;
+ transition: opacity 0.3s;
+
+ .btn {
+ margin: 8px;
+ font-size: var(--o-font-size-subtitle);
+ color: var(--o-text-color-fourth);
+
+ &:hover {
+ color: var(--o-color-primary);
+ }
+ }
+ }
+
+ .el-upload-dragger {
+ box-sizing: border-box;
+ padding: 0 !important;
+ border: 1px dashed rgb(195 206 223);
+ border-radius: 2px;
+ }
+
+ .el-checkbox__inner::before {
+ top: 4.5px !important;
+ width: 13px !important;
+ }
+
+ .el-progress__text {
+ font-weight: 600 !important;
+ }
+}
diff --git a/src/styles/uploadProgress.scss b/src/styles/uploadProgress.scss
new file mode 100644
index 0000000000000000000000000000000000000000..f0edf1a4864dd297cce80398d01bad65a3f65100
--- /dev/null
+++ b/src/styles/uploadProgress.scss
@@ -0,0 +1,161 @@
+.o-upload-progress-notify {
+ position: fixed;
+ right: 48px;
+ bottom: 48px;
+ z-index: 9999;
+ width: 400px;
+ overflow: hidden;
+ background-color: var(--o-bg-color-base);
+ border-color: var(--o-bg-color-base);
+ border-radius: var(--o-border-radius);
+ box-shadow: var(--o-box-shadow);
+
+ .o-upload-notify__head {
+ position: relative;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ height: 56px;
+ padding: 4px 16px;
+ font-size: var(--o-font-size-text);
+ line-height: var(--o-line-height-text);
+ color: var(--o-text-color-primary);
+ background-color: var(--o-bg-color-light);
+
+ .task-list {
+ font-size: 16px;
+ font-weight: 700;
+ line-height: 24px;
+ }
+
+ .nofity-show {
+ display: flex;
+ align-items: center;
+ width: 20px;
+ height: 100%;
+ }
+ }
+
+ .o-upload-notify__body {
+ padding: 8px 16px;
+ background-color: var(--o-bg-color-light);
+ }
+
+ .o-upload-notify__list {
+ display: flex;
+ flex-direction: column;
+ gap: 8px;
+ max-height: 500px;
+ overflow-y: auto;
+
+ .item {
+ padding: 16px;
+ padding-bottom: 12px;
+ background: rgb(253 254 255);
+
+ .el-progress__text {
+ min-width: 10px;
+ }
+ }
+
+ .item-box {
+ display: flex;
+ justify-content: space-between;
+ margin-bottom: 8px;
+ font-size: 12px;
+ font-weight: 600;
+ color: rgb(0 0 0);
+ }
+
+ .item-info {
+ display: flex;
+ }
+
+ .item-close {
+ width: 16px;
+ height: 16px;
+ cursor: pointer;
+ }
+
+ .item-name {
+ font-size: 12px;
+ max-width: 160px;
+ flex: 1;
+ }
+
+ .item-success-name {
+ max-width: 220px;
+ }
+
+ .item-file-size {
+ max-width: 70;
+ }
+
+ .upload-status {
+ width: 80px;
+ }
+
+ .upload-success {
+ display: flex;
+ gap: 6px;
+ align-items: center;
+ margin-top: 6px;
+ font-size: 12px;
+ color: rgb(0 0 0);
+ font-size: 12px;
+ font-weight: 600;
+ .el-icon {
+ font-size: 14px;
+
+ path {
+ fill: green !important;
+ }
+ }
+ }
+ .upload-error {
+ display: flex;
+ gap: 6px;
+ align-items: center;
+ margin-top: 6px;
+ font-size: 12px;
+ color: rgb(0 0 0);
+ font-size: 12px;
+ font-weight: 600;
+ .el-icon {
+ font-size: 14px;
+
+ path {
+ fill: rgb(228 33 33);
+ }
+ }
+ }
+
+ .upload-restart {
+ color: rgb(0 119 255);
+ cursor: pointer;
+ }
+ }
+
+ .item-all-close {
+ width: 100%;
+ margin-top: 16px;
+ margin-bottom: 8px;
+ font-size: 12px;
+ font-weight: 700;
+ color: rgb(0 119 255);
+ text-align: right;
+ cursor: pointer;
+ }
+
+ .o-upload-notify__close {
+ position: absolute;
+ right: 16px;
+ font-size: var(--o-font-size-body);
+ color: var(--o-text-color-secondary);
+ cursor: pointer;
+
+ &:hover {
+ color: var(--o-text-color-primary);
+ }
+ }
+}
diff --git a/src/styles/variables.module.scss b/src/styles/variables.module.scss
new file mode 100644
index 0000000000000000000000000000000000000000..20a624d7fbd50d84a78e55782a96266655f03e80
--- /dev/null
+++ b/src/styles/variables.module.scss
@@ -0,0 +1,11 @@
+/* stylelint-disable property-no-unknown */
+:export {
+ sidebar-width: $sidebar-width;
+ navbar-height: $navbar-height;
+ tags-view-height: $tags-view-height;
+ menu-background: $menu-background;
+ menu-text: $menu-text;
+ menu-active-text: $menu-active-text;
+ menu-hover: $menu-hover;
+}
+/* stylelint-enable property-no-unknown */
diff --git a/src/styles/variables.scss b/src/styles/variables.scss
new file mode 100644
index 0000000000000000000000000000000000000000..42f97182b59ce6430040a7c74e5db588e31c1abf
--- /dev/null
+++ b/src/styles/variables.scss
@@ -0,0 +1,34 @@
+/** 全局SCSS变量 */
+
+:root {
+ --menu-background: #304156;
+ --menu-text: #bfcbd9;
+ --menu-active-text: var(--el-menu-active-color);
+ --menu-hover: #263445;
+ --sidebar-logo-background: #2d3748;
+
+ // 修复表格 fixed 列被选中后由于透明色导致叠字的 bug
+ .el-table {
+ --el-table-current-row-bg-color: rgb(235 243 250);
+ }
+}
+
+/** 暗黑主题 */
+html.dark {
+ --menu-background: var(--el-bg-color-overlay);
+ --menu-text: #fff;
+ --menu-active-text: var(--el-menu-active-color);
+ --menu-hover: rgb(0 0 0 / 20%);
+ --sidebar-logo-background: rgb(0 0 0 / 20%);
+}
+
+$menu-background: var(--menu-background); // 菜单背景色
+$menu-text: var(--menu-text); // 菜单文字颜色
+$menu-active-text: var(--menu-active-text); // 菜单激活文字颜色
+$menu-hover: var(--menu-hover); // 菜单悬停背景色
+$sidebar-logo-background: var(--sidebar-logo-background); // 侧边栏 Logo 背景色
+
+$sidebar-width: 210px; // 侧边栏宽度
+$sidebar-width-collapsed: 54px; // 侧边栏收缩宽度
+$navbar-height: 50px; // 导航栏高度
+$tags-view-height: 34px; // TagsView 高度
diff --git a/src/types/auto-imports.d.ts b/src/types/auto-imports.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..f4a814dab85fcdab2d5649e77f380a89ded06d90
--- /dev/null
+++ b/src/types/auto-imports.d.ts
@@ -0,0 +1,1780 @@
+/* eslint-disable */
+/* prettier-ignore */
+// @ts-nocheck
+// noinspection JSUnusedGlobalSymbols
+// Generated by unplugin-auto-import
+export {}
+declare global {
+ const EffectScope: (typeof import("vue"))["EffectScope"];
+ const ElForm: (typeof import("element-plus/es"))["ElForm"];
+ const ElMessage: (typeof import("element-plus/es"))["ElMessage"];
+ const ElMessageBox: (typeof import("element-plus/es"))["ElMessageBox"];
+ const ElNotification: (typeof import("element-plus/es"))["ElNotification"];
+ const ElTree: (typeof import("element-plus/es"))["ElTree"];
+ const acceptHMRUpdate: (typeof import("pinia"))["acceptHMRUpdate"];
+ const asyncComputed: (typeof import("@vueuse/core"))["asyncComputed"];
+ const autoResetRef: (typeof import("@vueuse/core"))["autoResetRef"];
+ const computed: (typeof import("vue"))["computed"];
+ const computedAsync: (typeof import("@vueuse/core"))["computedAsync"];
+ const computedEager: (typeof import("@vueuse/core"))["computedEager"];
+ const computedInject: (typeof import("@vueuse/core"))["computedInject"];
+ const computedWithControl: (typeof import("@vueuse/core"))["computedWithControl"];
+ const controlledComputed: (typeof import("@vueuse/core"))["controlledComputed"];
+ const controlledRef: (typeof import("@vueuse/core"))["controlledRef"];
+ const createApp: (typeof import("vue"))["createApp"];
+ const createEventHook: (typeof import("@vueuse/core"))["createEventHook"];
+ const createGlobalState: (typeof import("@vueuse/core"))["createGlobalState"];
+ const createInjectionState: (typeof import("@vueuse/core"))["createInjectionState"];
+ const createPinia: (typeof import("pinia"))["createPinia"];
+ const createReactiveFn: (typeof import("@vueuse/core"))["createReactiveFn"];
+ const createReusableTemplate: (typeof import("@vueuse/core"))["createReusableTemplate"];
+ const createSharedComposable: (typeof import("@vueuse/core"))["createSharedComposable"];
+ const createTemplatePromise: (typeof import("@vueuse/core"))["createTemplatePromise"];
+ const createUnrefFn: (typeof import("@vueuse/core"))["createUnrefFn"];
+ const customRef: (typeof import("vue"))["customRef"];
+ const debouncedRef: (typeof import("@vueuse/core"))["debouncedRef"];
+ const debouncedWatch: (typeof import("@vueuse/core"))["debouncedWatch"];
+ const defineAsyncComponent: (typeof import("vue"))["defineAsyncComponent"];
+ const defineComponent: (typeof import("vue"))["defineComponent"];
+ const defineStore: (typeof import("pinia"))["defineStore"];
+ const eagerComputed: (typeof import("@vueuse/core"))["eagerComputed"];
+ const effectScope: (typeof import("vue"))["effectScope"];
+ const extendRef: (typeof import("@vueuse/core"))["extendRef"];
+ 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 ignorableWatch: (typeof import("@vueuse/core"))["ignorableWatch"];
+ const inject: (typeof import("vue"))["inject"];
+ const injectLocal: (typeof import("@vueuse/core"))["injectLocal"];
+ const isDefined: (typeof import("@vueuse/core"))["isDefined"];
+ 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 makeDestructurable: (typeof import("@vueuse/core"))["makeDestructurable"];
+ 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 onClickOutside: (typeof import("@vueuse/core"))["onClickOutside"];
+ const onDeactivated: (typeof import("vue"))["onDeactivated"];
+ const onErrorCaptured: (typeof import("vue"))["onErrorCaptured"];
+ const onKeyStroke: (typeof import("@vueuse/core"))["onKeyStroke"];
+ const onLongPress: (typeof import("@vueuse/core"))["onLongPress"];
+ 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 onStartTyping: (typeof import("@vueuse/core"))["onStartTyping"];
+ const onUnmounted: (typeof import("vue"))["onUnmounted"];
+ const onUpdated: (typeof import("vue"))["onUpdated"];
+ const pausableWatch: (typeof import("@vueuse/core"))["pausableWatch"];
+ const provide: (typeof import("vue"))["provide"];
+ const provideLocal: (typeof import("@vueuse/core"))["provideLocal"];
+ const reactify: (typeof import("@vueuse/core"))["reactify"];
+ const reactifyObject: (typeof import("@vueuse/core"))["reactifyObject"];
+ const reactive: (typeof import("vue"))["reactive"];
+ const reactiveComputed: (typeof import("@vueuse/core"))["reactiveComputed"];
+ const reactiveOmit: (typeof import("@vueuse/core"))["reactiveOmit"];
+ const reactivePick: (typeof import("@vueuse/core"))["reactivePick"];
+ const readonly: (typeof import("vue"))["readonly"];
+ const ref: (typeof import("vue"))["ref"];
+ const refAutoReset: (typeof import("@vueuse/core"))["refAutoReset"];
+ const refDebounced: (typeof import("@vueuse/core"))["refDebounced"];
+ const refDefault: (typeof import("@vueuse/core"))["refDefault"];
+ const refThrottled: (typeof import("@vueuse/core"))["refThrottled"];
+ const refWithControl: (typeof import("@vueuse/core"))["refWithControl"];
+ const resolveComponent: (typeof import("vue"))["resolveComponent"];
+ const resolveRef: (typeof import("@vueuse/core"))["resolveRef"];
+ const resolveUnref: (typeof import("@vueuse/core"))["resolveUnref"];
+ 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 syncRef: (typeof import("@vueuse/core"))["syncRef"];
+ const syncRefs: (typeof import("@vueuse/core"))["syncRefs"];
+ const templateRef: (typeof import("@vueuse/core"))["templateRef"];
+ const throttledRef: (typeof import("@vueuse/core"))["throttledRef"];
+ const throttledWatch: (typeof import("@vueuse/core"))["throttledWatch"];
+ const toRaw: (typeof import("vue"))["toRaw"];
+ const toReactive: (typeof import("@vueuse/core"))["toReactive"];
+ const toRef: (typeof import("vue"))["toRef"];
+ const toRefs: (typeof import("vue"))["toRefs"];
+ const toValue: (typeof import("vue"))["toValue"];
+ const triggerRef: (typeof import("vue"))["triggerRef"];
+ const tryOnBeforeMount: (typeof import("@vueuse/core"))["tryOnBeforeMount"];
+ const tryOnBeforeUnmount: (typeof import("@vueuse/core"))["tryOnBeforeUnmount"];
+ const tryOnMounted: (typeof import("@vueuse/core"))["tryOnMounted"];
+ const tryOnScopeDispose: (typeof import("@vueuse/core"))["tryOnScopeDispose"];
+ const tryOnUnmounted: (typeof import("@vueuse/core"))["tryOnUnmounted"];
+ const unref: (typeof import("vue"))["unref"];
+ const unrefElement: (typeof import("@vueuse/core"))["unrefElement"];
+ const until: (typeof import("@vueuse/core"))["until"];
+ const useActiveElement: (typeof import("@vueuse/core"))["useActiveElement"];
+ const useAnimate: (typeof import("@vueuse/core"))["useAnimate"];
+ const useArrayDifference: (typeof import("@vueuse/core"))["useArrayDifference"];
+ const useArrayEvery: (typeof import("@vueuse/core"))["useArrayEvery"];
+ const useArrayFilter: (typeof import("@vueuse/core"))["useArrayFilter"];
+ const useArrayFind: (typeof import("@vueuse/core"))["useArrayFind"];
+ const useArrayFindIndex: (typeof import("@vueuse/core"))["useArrayFindIndex"];
+ const useArrayFindLast: (typeof import("@vueuse/core"))["useArrayFindLast"];
+ const useArrayIncludes: (typeof import("@vueuse/core"))["useArrayIncludes"];
+ const useArrayJoin: (typeof import("@vueuse/core"))["useArrayJoin"];
+ const useArrayMap: (typeof import("@vueuse/core"))["useArrayMap"];
+ const useArrayReduce: (typeof import("@vueuse/core"))["useArrayReduce"];
+ const useArraySome: (typeof import("@vueuse/core"))["useArraySome"];
+ const useArrayUnique: (typeof import("@vueuse/core"))["useArrayUnique"];
+ const useAsyncQueue: (typeof import("@vueuse/core"))["useAsyncQueue"];
+ const useAsyncState: (typeof import("@vueuse/core"))["useAsyncState"];
+ const useAttrs: (typeof import("vue"))["useAttrs"];
+ const useBase64: (typeof import("@vueuse/core"))["useBase64"];
+ const useBattery: (typeof import("@vueuse/core"))["useBattery"];
+ const useBluetooth: (typeof import("@vueuse/core"))["useBluetooth"];
+ const useBreakpoints: (typeof import("@vueuse/core"))["useBreakpoints"];
+ const useBroadcastChannel: (typeof import("@vueuse/core"))["useBroadcastChannel"];
+ const useBrowserLocation: (typeof import("@vueuse/core"))["useBrowserLocation"];
+ const useCached: (typeof import("@vueuse/core"))["useCached"];
+ const useClipboard: (typeof import("@vueuse/core"))["useClipboard"];
+ const useClipboardItems: (typeof import("@vueuse/core"))["useClipboardItems"];
+ const useCloned: (typeof import("@vueuse/core"))["useCloned"];
+ const useColorMode: (typeof import("@vueuse/core"))["useColorMode"];
+ const useConfirmDialog: (typeof import("@vueuse/core"))["useConfirmDialog"];
+ const useCounter: (typeof import("@vueuse/core"))["useCounter"];
+ const useCssModule: (typeof import("vue"))["useCssModule"];
+ const useCssVar: (typeof import("@vueuse/core"))["useCssVar"];
+ const useCssVars: (typeof import("vue"))["useCssVars"];
+ const useCurrentElement: (typeof import("@vueuse/core"))["useCurrentElement"];
+ const useCycleList: (typeof import("@vueuse/core"))["useCycleList"];
+ const useDark: (typeof import("@vueuse/core"))["useDark"];
+ const useDateFormat: (typeof import("@vueuse/core"))["useDateFormat"];
+ const useDebounce: (typeof import("@vueuse/core"))["useDebounce"];
+ const useDebounceFn: (typeof import("@vueuse/core"))["useDebounceFn"];
+ const useDebouncedRefHistory: (typeof import("@vueuse/core"))["useDebouncedRefHistory"];
+ const useDeviceMotion: (typeof import("@vueuse/core"))["useDeviceMotion"];
+ const useDeviceOrientation: (typeof import("@vueuse/core"))["useDeviceOrientation"];
+ const useDevicePixelRatio: (typeof import("@vueuse/core"))["useDevicePixelRatio"];
+ const useDevicesList: (typeof import("@vueuse/core"))["useDevicesList"];
+ const useDisplayMedia: (typeof import("@vueuse/core"))["useDisplayMedia"];
+ const useDocumentVisibility: (typeof import("@vueuse/core"))["useDocumentVisibility"];
+ const useDraggable: (typeof import("@vueuse/core"))["useDraggable"];
+ const useDropZone: (typeof import("@vueuse/core"))["useDropZone"];
+ const useElementBounding: (typeof import("@vueuse/core"))["useElementBounding"];
+ const useElementByPoint: (typeof import("@vueuse/core"))["useElementByPoint"];
+ const useElementHover: (typeof import("@vueuse/core"))["useElementHover"];
+ const useElementSize: (typeof import("@vueuse/core"))["useElementSize"];
+ const useElementVisibility: (typeof import("@vueuse/core"))["useElementVisibility"];
+ const useEventBus: (typeof import("@vueuse/core"))["useEventBus"];
+ const useEventListener: (typeof import("@vueuse/core"))["useEventListener"];
+ const useEventSource: (typeof import("@vueuse/core"))["useEventSource"];
+ const useEyeDropper: (typeof import("@vueuse/core"))["useEyeDropper"];
+ const useFavicon: (typeof import("@vueuse/core"))["useFavicon"];
+ const useFetch: (typeof import("@vueuse/core"))["useFetch"];
+ const useFileDialog: (typeof import("@vueuse/core"))["useFileDialog"];
+ const useFileSystemAccess: (typeof import("@vueuse/core"))["useFileSystemAccess"];
+ const useFocus: (typeof import("@vueuse/core"))["useFocus"];
+ const useFocusWithin: (typeof import("@vueuse/core"))["useFocusWithin"];
+ const useFps: (typeof import("@vueuse/core"))["useFps"];
+ const useFullscreen: (typeof import("@vueuse/core"))["useFullscreen"];
+ const useGamepad: (typeof import("@vueuse/core"))["useGamepad"];
+ const useGeolocation: (typeof import("@vueuse/core"))["useGeolocation"];
+ const useI18n: (typeof import("vue-i18n"))["useI18n"];
+ const useIdle: (typeof import("@vueuse/core"))["useIdle"];
+ const useImage: (typeof import("@vueuse/core"))["useImage"];
+ const useInfiniteScroll: (typeof import("@vueuse/core"))["useInfiniteScroll"];
+ const useIntersectionObserver: (typeof import("@vueuse/core"))["useIntersectionObserver"];
+ const useInterval: (typeof import("@vueuse/core"))["useInterval"];
+ const useIntervalFn: (typeof import("@vueuse/core"))["useIntervalFn"];
+ const useKeyModifier: (typeof import("@vueuse/core"))["useKeyModifier"];
+ const useLastChanged: (typeof import("@vueuse/core"))["useLastChanged"];
+ const useLink: (typeof import("vue-router"))["useLink"];
+ const useLocalStorage: (typeof import("@vueuse/core"))["useLocalStorage"];
+ const useMagicKeys: (typeof import("@vueuse/core"))["useMagicKeys"];
+ const useManualRefHistory: (typeof import("@vueuse/core"))["useManualRefHistory"];
+ const useMediaControls: (typeof import("@vueuse/core"))["useMediaControls"];
+ const useMediaQuery: (typeof import("@vueuse/core"))["useMediaQuery"];
+ const useMemoize: (typeof import("@vueuse/core"))["useMemoize"];
+ const useMemory: (typeof import("@vueuse/core"))["useMemory"];
+ const useMounted: (typeof import("@vueuse/core"))["useMounted"];
+ const useMouse: (typeof import("@vueuse/core"))["useMouse"];
+ const useMouseInElement: (typeof import("@vueuse/core"))["useMouseInElement"];
+ const useMousePressed: (typeof import("@vueuse/core"))["useMousePressed"];
+ const useMutationObserver: (typeof import("@vueuse/core"))["useMutationObserver"];
+ const useNavigatorLanguage: (typeof import("@vueuse/core"))["useNavigatorLanguage"];
+ const useNetwork: (typeof import("@vueuse/core"))["useNetwork"];
+ const useNow: (typeof import("@vueuse/core"))["useNow"];
+ const useObjectUrl: (typeof import("@vueuse/core"))["useObjectUrl"];
+ const useOffsetPagination: (typeof import("@vueuse/core"))["useOffsetPagination"];
+ const useOnline: (typeof import("@vueuse/core"))["useOnline"];
+ const usePageLeave: (typeof import("@vueuse/core"))["usePageLeave"];
+ const useParallax: (typeof import("@vueuse/core"))["useParallax"];
+ const useParentElement: (typeof import("@vueuse/core"))["useParentElement"];
+ const usePerformanceObserver: (typeof import("@vueuse/core"))["usePerformanceObserver"];
+ const usePermission: (typeof import("@vueuse/core"))["usePermission"];
+ const usePointer: (typeof import("@vueuse/core"))["usePointer"];
+ const usePointerLock: (typeof import("@vueuse/core"))["usePointerLock"];
+ const usePointerSwipe: (typeof import("@vueuse/core"))["usePointerSwipe"];
+ const usePreferredColorScheme: (typeof import("@vueuse/core"))["usePreferredColorScheme"];
+ const usePreferredContrast: (typeof import("@vueuse/core"))["usePreferredContrast"];
+ const usePreferredDark: (typeof import("@vueuse/core"))["usePreferredDark"];
+ const usePreferredLanguages: (typeof import("@vueuse/core"))["usePreferredLanguages"];
+ const usePreferredReducedMotion: (typeof import("@vueuse/core"))["usePreferredReducedMotion"];
+ const usePrevious: (typeof import("@vueuse/core"))["usePrevious"];
+ const useRafFn: (typeof import("@vueuse/core"))["useRafFn"];
+ const useRefHistory: (typeof import("@vueuse/core"))["useRefHistory"];
+ const useResizeObserver: (typeof import("@vueuse/core"))["useResizeObserver"];
+ const useRoute: (typeof import("vue-router"))["useRoute"];
+ const useRouter: (typeof import("vue-router"))["useRouter"];
+ const useScreenOrientation: (typeof import("@vueuse/core"))["useScreenOrientation"];
+ const useScreenSafeArea: (typeof import("@vueuse/core"))["useScreenSafeArea"];
+ const useScriptTag: (typeof import("@vueuse/core"))["useScriptTag"];
+ const useScroll: (typeof import("@vueuse/core"))["useScroll"];
+ const useScrollLock: (typeof import("@vueuse/core"))["useScrollLock"];
+ const useSessionStorage: (typeof import("@vueuse/core"))["useSessionStorage"];
+ const useShare: (typeof import("@vueuse/core"))["useShare"];
+ const useSlots: (typeof import("vue"))["useSlots"];
+ const useSorted: (typeof import("@vueuse/core"))["useSorted"];
+ const useSpeechRecognition: (typeof import("@vueuse/core"))["useSpeechRecognition"];
+ const useSpeechSynthesis: (typeof import("@vueuse/core"))["useSpeechSynthesis"];
+ const useStepper: (typeof import("@vueuse/core"))["useStepper"];
+ const useStorage: (typeof import("@vueuse/core"))["useStorage"];
+ const useStorageAsync: (typeof import("@vueuse/core"))["useStorageAsync"];
+ const useStyleTag: (typeof import("@vueuse/core"))["useStyleTag"];
+ const useSupported: (typeof import("@vueuse/core"))["useSupported"];
+ const useSwipe: (typeof import("@vueuse/core"))["useSwipe"];
+ const useTemplateRefsList: (typeof import("@vueuse/core"))["useTemplateRefsList"];
+ const useTextDirection: (typeof import("@vueuse/core"))["useTextDirection"];
+ const useTextSelection: (typeof import("@vueuse/core"))["useTextSelection"];
+ const useTextareaAutosize: (typeof import("@vueuse/core"))["useTextareaAutosize"];
+ const useThrottle: (typeof import("@vueuse/core"))["useThrottle"];
+ const useThrottleFn: (typeof import("@vueuse/core"))["useThrottleFn"];
+ const useThrottledRefHistory: (typeof import("@vueuse/core"))["useThrottledRefHistory"];
+ const useTimeAgo: (typeof import("@vueuse/core"))["useTimeAgo"];
+ const useTimeout: (typeof import("@vueuse/core"))["useTimeout"];
+ const useTimeoutFn: (typeof import("@vueuse/core"))["useTimeoutFn"];
+ const useTimeoutPoll: (typeof import("@vueuse/core"))["useTimeoutPoll"];
+ const useTimestamp: (typeof import("@vueuse/core"))["useTimestamp"];
+ const useTitle: (typeof import("@vueuse/core"))["useTitle"];
+ const useToNumber: (typeof import("@vueuse/core"))["useToNumber"];
+ const useToString: (typeof import("@vueuse/core"))["useToString"];
+ const useToggle: (typeof import("@vueuse/core"))["useToggle"];
+ const useTransition: (typeof import("@vueuse/core"))["useTransition"];
+ const useUrlSearchParams: (typeof import("@vueuse/core"))["useUrlSearchParams"];
+ const useUserMedia: (typeof import("@vueuse/core"))["useUserMedia"];
+ const useVModel: (typeof import("@vueuse/core"))["useVModel"];
+ const useVModels: (typeof import("@vueuse/core"))["useVModels"];
+ const useVibrate: (typeof import("@vueuse/core"))["useVibrate"];
+ const useVirtualList: (typeof import("@vueuse/core"))["useVirtualList"];
+ const useWakeLock: (typeof import("@vueuse/core"))["useWakeLock"];
+ const useWebNotification: (typeof import("@vueuse/core"))["useWebNotification"];
+ const useWebSocket: (typeof import("@vueuse/core"))["useWebSocket"];
+ const useWebWorker: (typeof import("@vueuse/core"))["useWebWorker"];
+ const useWebWorkerFn: (typeof import("@vueuse/core"))["useWebWorkerFn"];
+ const useWindowFocus: (typeof import("@vueuse/core"))["useWindowFocus"];
+ const useWindowScroll: (typeof import("@vueuse/core"))["useWindowScroll"];
+ const useWindowSize: (typeof import("@vueuse/core"))["useWindowSize"];
+ const watch: (typeof import("vue"))["watch"];
+ const watchArray: (typeof import("@vueuse/core"))["watchArray"];
+ const watchAtMost: (typeof import("@vueuse/core"))["watchAtMost"];
+ const watchDebounced: (typeof import("@vueuse/core"))["watchDebounced"];
+ const watchDeep: (typeof import("@vueuse/core"))["watchDeep"];
+ const watchEffect: (typeof import("vue"))["watchEffect"];
+ const watchIgnorable: (typeof import("@vueuse/core"))["watchIgnorable"];
+ const watchImmediate: (typeof import("@vueuse/core"))["watchImmediate"];
+ const watchOnce: (typeof import("@vueuse/core"))["watchOnce"];
+ const watchPausable: (typeof import("@vueuse/core"))["watchPausable"];
+ const watchPostEffect: (typeof import("vue"))["watchPostEffect"];
+ const watchSyncEffect: (typeof import("vue"))["watchSyncEffect"];
+ const watchThrottled: (typeof import("@vueuse/core"))["watchThrottled"];
+ const watchTriggerable: (typeof import("@vueuse/core"))["watchTriggerable"];
+ const watchWithFilter: (typeof import("@vueuse/core"))["watchWithFilter"];
+ const whenever: (typeof import("@vueuse/core"))["whenever"];
+}
+// for type re-export
+declare global {
+ // @ts-ignore
+ export type {
+ Component,
+ ComponentPublicInstance,
+ ComputedRef,
+ ExtractDefaultPropTypes,
+ ExtractPropTypes,
+ ExtractPublicPropTypes,
+ InjectionKey,
+ PropType,
+ Ref,
+ VNode,
+ WritableComputedRef,
+ } from "vue";
+ import("vue");
+}
+// for vue template auto import
+import { UnwrapRef } from "vue";
+declare module "vue" {
+ interface GlobalComponents {}
+ interface ComponentCustomProperties {
+ readonly EffectScope: UnwrapRef<(typeof import("vue"))["EffectScope"]>;
+ readonly ElMessage: UnwrapRef<
+ (typeof import("element-plus/es"))["ElMessage"]
+ >;
+ readonly ElMessageBox: UnwrapRef<
+ (typeof import("element-plus/es"))["ElMessageBox"]
+ >;
+ readonly acceptHMRUpdate: UnwrapRef<
+ (typeof import("pinia"))["acceptHMRUpdate"]
+ >;
+ readonly asyncComputed: UnwrapRef<
+ (typeof import("@vueuse/core"))["asyncComputed"]
+ >;
+ readonly autoResetRef: UnwrapRef<
+ (typeof import("@vueuse/core"))["autoResetRef"]
+ >;
+ readonly computed: UnwrapRef<(typeof import("vue"))["computed"]>;
+ readonly computedAsync: UnwrapRef<
+ (typeof import("@vueuse/core"))["computedAsync"]
+ >;
+ readonly computedEager: UnwrapRef<
+ (typeof import("@vueuse/core"))["computedEager"]
+ >;
+ readonly computedInject: UnwrapRef<
+ (typeof import("@vueuse/core"))["computedInject"]
+ >;
+ readonly computedWithControl: UnwrapRef<
+ (typeof import("@vueuse/core"))["computedWithControl"]
+ >;
+ readonly controlledComputed: UnwrapRef<
+ (typeof import("@vueuse/core"))["controlledComputed"]
+ >;
+ readonly controlledRef: UnwrapRef<
+ (typeof import("@vueuse/core"))["controlledRef"]
+ >;
+ readonly createApp: UnwrapRef<(typeof import("vue"))["createApp"]>;
+ readonly createEventHook: UnwrapRef<
+ (typeof import("@vueuse/core"))["createEventHook"]
+ >;
+ readonly createGlobalState: UnwrapRef<
+ (typeof import("@vueuse/core"))["createGlobalState"]
+ >;
+ readonly createInjectionState: UnwrapRef<
+ (typeof import("@vueuse/core"))["createInjectionState"]
+ >;
+ readonly createPinia: UnwrapRef<(typeof import("pinia"))["createPinia"]>;
+ readonly createReactiveFn: UnwrapRef<
+ (typeof import("@vueuse/core"))["createReactiveFn"]
+ >;
+ readonly createReusableTemplate: UnwrapRef<
+ (typeof import("@vueuse/core"))["createReusableTemplate"]
+ >;
+ readonly createSharedComposable: UnwrapRef<
+ (typeof import("@vueuse/core"))["createSharedComposable"]
+ >;
+ readonly createTemplatePromise: UnwrapRef<
+ (typeof import("@vueuse/core"))["createTemplatePromise"]
+ >;
+ readonly createUnrefFn: UnwrapRef<
+ (typeof import("@vueuse/core"))["createUnrefFn"]
+ >;
+ readonly customRef: UnwrapRef<(typeof import("vue"))["customRef"]>;
+ readonly debouncedRef: UnwrapRef<
+ (typeof import("@vueuse/core"))["debouncedRef"]
+ >;
+ readonly debouncedWatch: UnwrapRef<
+ (typeof import("@vueuse/core"))["debouncedWatch"]
+ >;
+ readonly defineAsyncComponent: UnwrapRef<
+ (typeof import("vue"))["defineAsyncComponent"]
+ >;
+ readonly defineComponent: UnwrapRef<
+ (typeof import("vue"))["defineComponent"]
+ >;
+ readonly defineStore: UnwrapRef<(typeof import("pinia"))["defineStore"]>;
+ readonly eagerComputed: UnwrapRef<
+ (typeof import("@vueuse/core"))["eagerComputed"]
+ >;
+ readonly effectScope: UnwrapRef<(typeof import("vue"))["effectScope"]>;
+ readonly extendRef: UnwrapRef<(typeof import("@vueuse/core"))["extendRef"]>;
+ readonly getActivePinia: UnwrapRef<
+ (typeof import("pinia"))["getActivePinia"]
+ >;
+ readonly getCurrentInstance: UnwrapRef<
+ (typeof import("vue"))["getCurrentInstance"]
+ >;
+ readonly getCurrentScope: UnwrapRef<
+ (typeof import("vue"))["getCurrentScope"]
+ >;
+ readonly h: UnwrapRef<(typeof import("vue"))["h"]>;
+ readonly ignorableWatch: UnwrapRef<
+ (typeof import("@vueuse/core"))["ignorableWatch"]
+ >;
+ readonly inject: UnwrapRef<(typeof import("vue"))["inject"]>;
+ readonly injectLocal: UnwrapRef<
+ (typeof import("@vueuse/core"))["injectLocal"]
+ >;
+ readonly isDefined: UnwrapRef<(typeof import("@vueuse/core"))["isDefined"]>;
+ readonly isProxy: UnwrapRef<(typeof import("vue"))["isProxy"]>;
+ readonly isReactive: UnwrapRef<(typeof import("vue"))["isReactive"]>;
+ readonly isReadonly: UnwrapRef<(typeof import("vue"))["isReadonly"]>;
+ readonly isRef: UnwrapRef<(typeof import("vue"))["isRef"]>;
+ readonly makeDestructurable: UnwrapRef<
+ (typeof import("@vueuse/core"))["makeDestructurable"]
+ >;
+ readonly mapActions: UnwrapRef<(typeof import("pinia"))["mapActions"]>;
+ readonly mapGetters: UnwrapRef<(typeof import("pinia"))["mapGetters"]>;
+ readonly mapState: UnwrapRef<(typeof import("pinia"))["mapState"]>;
+ readonly mapStores: UnwrapRef<(typeof import("pinia"))["mapStores"]>;
+ readonly mapWritableState: UnwrapRef<
+ (typeof import("pinia"))["mapWritableState"]
+ >;
+ readonly markRaw: UnwrapRef<(typeof import("vue"))["markRaw"]>;
+ readonly nextTick: UnwrapRef<(typeof import("vue"))["nextTick"]>;
+ readonly onActivated: UnwrapRef<(typeof import("vue"))["onActivated"]>;
+ readonly onBeforeMount: UnwrapRef<(typeof import("vue"))["onBeforeMount"]>;
+ readonly onBeforeRouteLeave: UnwrapRef<
+ (typeof import("vue-router"))["onBeforeRouteLeave"]
+ >;
+ readonly onBeforeRouteUpdate: UnwrapRef<
+ (typeof import("vue-router"))["onBeforeRouteUpdate"]
+ >;
+ readonly onBeforeUnmount: UnwrapRef<
+ (typeof import("vue"))["onBeforeUnmount"]
+ >;
+ readonly onBeforeUpdate: UnwrapRef<
+ (typeof import("vue"))["onBeforeUpdate"]
+ >;
+ readonly onClickOutside: UnwrapRef<
+ (typeof import("@vueuse/core"))["onClickOutside"]
+ >;
+ readonly onDeactivated: UnwrapRef<(typeof import("vue"))["onDeactivated"]>;
+ readonly onErrorCaptured: UnwrapRef<
+ (typeof import("vue"))["onErrorCaptured"]
+ >;
+ readonly onKeyStroke: UnwrapRef<
+ (typeof import("@vueuse/core"))["onKeyStroke"]
+ >;
+ readonly onLongPress: UnwrapRef<
+ (typeof import("@vueuse/core"))["onLongPress"]
+ >;
+ readonly onMounted: UnwrapRef<(typeof import("vue"))["onMounted"]>;
+ readonly onRenderTracked: UnwrapRef<
+ (typeof import("vue"))["onRenderTracked"]
+ >;
+ readonly onRenderTriggered: UnwrapRef<
+ (typeof import("vue"))["onRenderTriggered"]
+ >;
+ readonly onScopeDispose: UnwrapRef<
+ (typeof import("vue"))["onScopeDispose"]
+ >;
+ readonly onServerPrefetch: UnwrapRef<
+ (typeof import("vue"))["onServerPrefetch"]
+ >;
+ readonly onStartTyping: UnwrapRef<
+ (typeof import("@vueuse/core"))["onStartTyping"]
+ >;
+ readonly onUnmounted: UnwrapRef<(typeof import("vue"))["onUnmounted"]>;
+ readonly onUpdated: UnwrapRef<(typeof import("vue"))["onUpdated"]>;
+ readonly pausableWatch: UnwrapRef<
+ (typeof import("@vueuse/core"))["pausableWatch"]
+ >;
+ readonly provide: UnwrapRef<(typeof import("vue"))["provide"]>;
+ readonly provideLocal: UnwrapRef<
+ (typeof import("@vueuse/core"))["provideLocal"]
+ >;
+ readonly reactify: UnwrapRef<(typeof import("@vueuse/core"))["reactify"]>;
+ readonly reactifyObject: UnwrapRef<
+ (typeof import("@vueuse/core"))["reactifyObject"]
+ >;
+ readonly reactive: UnwrapRef<(typeof import("vue"))["reactive"]>;
+ readonly reactiveComputed: UnwrapRef<
+ (typeof import("@vueuse/core"))["reactiveComputed"]
+ >;
+ readonly reactiveOmit: UnwrapRef<
+ (typeof import("@vueuse/core"))["reactiveOmit"]
+ >;
+ readonly reactivePick: UnwrapRef<
+ (typeof import("@vueuse/core"))["reactivePick"]
+ >;
+ readonly readonly: UnwrapRef<(typeof import("vue"))["readonly"]>;
+ readonly ref: UnwrapRef<(typeof import("vue"))["ref"]>;
+ readonly refAutoReset: UnwrapRef<
+ (typeof import("@vueuse/core"))["refAutoReset"]
+ >;
+ readonly refDebounced: UnwrapRef<
+ (typeof import("@vueuse/core"))["refDebounced"]
+ >;
+ readonly refDefault: UnwrapRef<
+ (typeof import("@vueuse/core"))["refDefault"]
+ >;
+ readonly refThrottled: UnwrapRef<
+ (typeof import("@vueuse/core"))["refThrottled"]
+ >;
+ readonly refWithControl: UnwrapRef<
+ (typeof import("@vueuse/core"))["refWithControl"]
+ >;
+ readonly resolveComponent: UnwrapRef<
+ (typeof import("vue"))["resolveComponent"]
+ >;
+ readonly resolveRef: UnwrapRef<
+ (typeof import("@vueuse/core"))["resolveRef"]
+ >;
+ readonly resolveUnref: UnwrapRef<
+ (typeof import("@vueuse/core"))["resolveUnref"]
+ >;
+ readonly setActivePinia: UnwrapRef<
+ (typeof import("pinia"))["setActivePinia"]
+ >;
+ readonly setMapStoreSuffix: UnwrapRef<
+ (typeof import("pinia"))["setMapStoreSuffix"]
+ >;
+ readonly shallowReactive: UnwrapRef<
+ (typeof import("vue"))["shallowReactive"]
+ >;
+ readonly shallowReadonly: UnwrapRef<
+ (typeof import("vue"))["shallowReadonly"]
+ >;
+ readonly shallowRef: UnwrapRef<(typeof import("vue"))["shallowRef"]>;
+ readonly storeToRefs: UnwrapRef<(typeof import("pinia"))["storeToRefs"]>;
+ readonly syncRef: UnwrapRef<(typeof import("@vueuse/core"))["syncRef"]>;
+ readonly syncRefs: UnwrapRef<(typeof import("@vueuse/core"))["syncRefs"]>;
+ readonly templateRef: UnwrapRef<
+ (typeof import("@vueuse/core"))["templateRef"]
+ >;
+ readonly throttledRef: UnwrapRef<
+ (typeof import("@vueuse/core"))["throttledRef"]
+ >;
+ readonly throttledWatch: UnwrapRef<
+ (typeof import("@vueuse/core"))["throttledWatch"]
+ >;
+ readonly toRaw: UnwrapRef<(typeof import("vue"))["toRaw"]>;
+ readonly toReactive: UnwrapRef<
+ (typeof import("@vueuse/core"))["toReactive"]
+ >;
+ readonly toRef: UnwrapRef<(typeof import("vue"))["toRef"]>;
+ readonly toRefs: UnwrapRef<(typeof import("vue"))["toRefs"]>;
+ readonly toValue: UnwrapRef<(typeof import("vue"))["toValue"]>;
+ readonly triggerRef: UnwrapRef<(typeof import("vue"))["triggerRef"]>;
+ readonly tryOnBeforeMount: UnwrapRef<
+ (typeof import("@vueuse/core"))["tryOnBeforeMount"]
+ >;
+ readonly tryOnBeforeUnmount: UnwrapRef<
+ (typeof import("@vueuse/core"))["tryOnBeforeUnmount"]
+ >;
+ readonly tryOnMounted: UnwrapRef<
+ (typeof import("@vueuse/core"))["tryOnMounted"]
+ >;
+ readonly tryOnScopeDispose: UnwrapRef<
+ (typeof import("@vueuse/core"))["tryOnScopeDispose"]
+ >;
+ readonly tryOnUnmounted: UnwrapRef<
+ (typeof import("@vueuse/core"))["tryOnUnmounted"]
+ >;
+ readonly unref: UnwrapRef<(typeof import("vue"))["unref"]>;
+ readonly unrefElement: UnwrapRef<
+ (typeof import("@vueuse/core"))["unrefElement"]
+ >;
+ readonly until: UnwrapRef<(typeof import("@vueuse/core"))["until"]>;
+ readonly useActiveElement: UnwrapRef<
+ (typeof import("@vueuse/core"))["useActiveElement"]
+ >;
+ readonly useAnimate: UnwrapRef<
+ (typeof import("@vueuse/core"))["useAnimate"]
+ >;
+ readonly useArrayDifference: UnwrapRef<
+ (typeof import("@vueuse/core"))["useArrayDifference"]
+ >;
+ readonly useArrayEvery: UnwrapRef<
+ (typeof import("@vueuse/core"))["useArrayEvery"]
+ >;
+ readonly useArrayFilter: UnwrapRef<
+ (typeof import("@vueuse/core"))["useArrayFilter"]
+ >;
+ readonly useArrayFind: UnwrapRef<
+ (typeof import("@vueuse/core"))["useArrayFind"]
+ >;
+ readonly useArrayFindIndex: UnwrapRef<
+ (typeof import("@vueuse/core"))["useArrayFindIndex"]
+ >;
+ readonly useArrayFindLast: UnwrapRef<
+ (typeof import("@vueuse/core"))["useArrayFindLast"]
+ >;
+ readonly useArrayIncludes: UnwrapRef<
+ (typeof import("@vueuse/core"))["useArrayIncludes"]
+ >;
+ readonly useArrayJoin: UnwrapRef<
+ (typeof import("@vueuse/core"))["useArrayJoin"]
+ >;
+ readonly useArrayMap: UnwrapRef<
+ (typeof import("@vueuse/core"))["useArrayMap"]
+ >;
+ readonly useArrayReduce: UnwrapRef<
+ (typeof import("@vueuse/core"))["useArrayReduce"]
+ >;
+ readonly useArraySome: UnwrapRef<
+ (typeof import("@vueuse/core"))["useArraySome"]
+ >;
+ readonly useArrayUnique: UnwrapRef<
+ (typeof import("@vueuse/core"))["useArrayUnique"]
+ >;
+ readonly useAsyncQueue: UnwrapRef<
+ (typeof import("@vueuse/core"))["useAsyncQueue"]
+ >;
+ readonly useAsyncState: UnwrapRef<
+ (typeof import("@vueuse/core"))["useAsyncState"]
+ >;
+ readonly useAttrs: UnwrapRef<(typeof import("vue"))["useAttrs"]>;
+ readonly useBase64: UnwrapRef<(typeof import("@vueuse/core"))["useBase64"]>;
+ readonly useBattery: UnwrapRef<
+ (typeof import("@vueuse/core"))["useBattery"]
+ >;
+ readonly useBluetooth: UnwrapRef<
+ (typeof import("@vueuse/core"))["useBluetooth"]
+ >;
+ readonly useBreakpoints: UnwrapRef<
+ (typeof import("@vueuse/core"))["useBreakpoints"]
+ >;
+ readonly useBroadcastChannel: UnwrapRef<
+ (typeof import("@vueuse/core"))["useBroadcastChannel"]
+ >;
+ readonly useBrowserLocation: UnwrapRef<
+ (typeof import("@vueuse/core"))["useBrowserLocation"]
+ >;
+ readonly useCached: UnwrapRef<(typeof import("@vueuse/core"))["useCached"]>;
+ readonly useClipboard: UnwrapRef<
+ (typeof import("@vueuse/core"))["useClipboard"]
+ >;
+ readonly useClipboardItems: UnwrapRef<
+ (typeof import("@vueuse/core"))["useClipboardItems"]
+ >;
+ readonly useCloned: UnwrapRef<(typeof import("@vueuse/core"))["useCloned"]>;
+ readonly useColorMode: UnwrapRef<
+ (typeof import("@vueuse/core"))["useColorMode"]
+ >;
+ readonly useConfirmDialog: UnwrapRef<
+ (typeof import("@vueuse/core"))["useConfirmDialog"]
+ >;
+ readonly useCounter: UnwrapRef<
+ (typeof import("@vueuse/core"))["useCounter"]
+ >;
+ readonly useCssModule: UnwrapRef<(typeof import("vue"))["useCssModule"]>;
+ readonly useCssVar: UnwrapRef<(typeof import("@vueuse/core"))["useCssVar"]>;
+ readonly useCssVars: UnwrapRef<(typeof import("vue"))["useCssVars"]>;
+ readonly useCurrentElement: UnwrapRef<
+ (typeof import("@vueuse/core"))["useCurrentElement"]
+ >;
+ readonly useCycleList: UnwrapRef<
+ (typeof import("@vueuse/core"))["useCycleList"]
+ >;
+ readonly useDark: UnwrapRef<(typeof import("@vueuse/core"))["useDark"]>;
+ readonly useDateFormat: UnwrapRef<
+ (typeof import("@vueuse/core"))["useDateFormat"]
+ >;
+ readonly useDebounce: UnwrapRef<
+ (typeof import("@vueuse/core"))["useDebounce"]
+ >;
+ readonly useDebounceFn: UnwrapRef<
+ (typeof import("@vueuse/core"))["useDebounceFn"]
+ >;
+ readonly useDebouncedRefHistory: UnwrapRef<
+ (typeof import("@vueuse/core"))["useDebouncedRefHistory"]
+ >;
+ readonly useDeviceMotion: UnwrapRef<
+ (typeof import("@vueuse/core"))["useDeviceMotion"]
+ >;
+ readonly useDeviceOrientation: UnwrapRef<
+ (typeof import("@vueuse/core"))["useDeviceOrientation"]
+ >;
+ readonly useDevicePixelRatio: UnwrapRef<
+ (typeof import("@vueuse/core"))["useDevicePixelRatio"]
+ >;
+ readonly useDevicesList: UnwrapRef<
+ (typeof import("@vueuse/core"))["useDevicesList"]
+ >;
+ readonly useDisplayMedia: UnwrapRef<
+ (typeof import("@vueuse/core"))["useDisplayMedia"]
+ >;
+ readonly useDocumentVisibility: UnwrapRef<
+ (typeof import("@vueuse/core"))["useDocumentVisibility"]
+ >;
+ readonly useDraggable: UnwrapRef<
+ (typeof import("@vueuse/core"))["useDraggable"]
+ >;
+ readonly useDropZone: UnwrapRef<
+ (typeof import("@vueuse/core"))["useDropZone"]
+ >;
+ readonly useElementBounding: UnwrapRef<
+ (typeof import("@vueuse/core"))["useElementBounding"]
+ >;
+ readonly useElementByPoint: UnwrapRef<
+ (typeof import("@vueuse/core"))["useElementByPoint"]
+ >;
+ readonly useElementHover: UnwrapRef<
+ (typeof import("@vueuse/core"))["useElementHover"]
+ >;
+ readonly useElementSize: UnwrapRef<
+ (typeof import("@vueuse/core"))["useElementSize"]
+ >;
+ readonly useElementVisibility: UnwrapRef<
+ (typeof import("@vueuse/core"))["useElementVisibility"]
+ >;
+ readonly useEventBus: UnwrapRef<
+ (typeof import("@vueuse/core"))["useEventBus"]
+ >;
+ readonly useEventListener: UnwrapRef<
+ (typeof import("@vueuse/core"))["useEventListener"]
+ >;
+ readonly useEventSource: UnwrapRef<
+ (typeof import("@vueuse/core"))["useEventSource"]
+ >;
+ readonly useEyeDropper: UnwrapRef<
+ (typeof import("@vueuse/core"))["useEyeDropper"]
+ >;
+ readonly useFavicon: UnwrapRef<
+ (typeof import("@vueuse/core"))["useFavicon"]
+ >;
+ readonly useFetch: UnwrapRef<(typeof import("@vueuse/core"))["useFetch"]>;
+ readonly useFileDialog: UnwrapRef<
+ (typeof import("@vueuse/core"))["useFileDialog"]
+ >;
+ readonly useFileSystemAccess: UnwrapRef<
+ (typeof import("@vueuse/core"))["useFileSystemAccess"]
+ >;
+ readonly useFocus: UnwrapRef<(typeof import("@vueuse/core"))["useFocus"]>;
+ readonly useFocusWithin: UnwrapRef<
+ (typeof import("@vueuse/core"))["useFocusWithin"]
+ >;
+ readonly useFps: UnwrapRef<(typeof import("@vueuse/core"))["useFps"]>;
+ readonly useFullscreen: UnwrapRef<
+ (typeof import("@vueuse/core"))["useFullscreen"]
+ >;
+ readonly useGamepad: UnwrapRef<
+ (typeof import("@vueuse/core"))["useGamepad"]
+ >;
+ readonly useGeolocation: UnwrapRef<
+ (typeof import("@vueuse/core"))["useGeolocation"]
+ >;
+ readonly useI18n: UnwrapRef<(typeof import("vue-i18n"))["useI18n"]>;
+ readonly useIdle: UnwrapRef<(typeof import("@vueuse/core"))["useIdle"]>;
+ readonly useImage: UnwrapRef<(typeof import("@vueuse/core"))["useImage"]>;
+ readonly useInfiniteScroll: UnwrapRef<
+ (typeof import("@vueuse/core"))["useInfiniteScroll"]
+ >;
+ readonly useIntersectionObserver: UnwrapRef<
+ (typeof import("@vueuse/core"))["useIntersectionObserver"]
+ >;
+ readonly useInterval: UnwrapRef<
+ (typeof import("@vueuse/core"))["useInterval"]
+ >;
+ readonly useIntervalFn: UnwrapRef<
+ (typeof import("@vueuse/core"))["useIntervalFn"]
+ >;
+ readonly useKeyModifier: UnwrapRef<
+ (typeof import("@vueuse/core"))["useKeyModifier"]
+ >;
+ readonly useLastChanged: UnwrapRef<
+ (typeof import("@vueuse/core"))["useLastChanged"]
+ >;
+ readonly useLink: UnwrapRef<(typeof import("vue-router"))["useLink"]>;
+ readonly useLocalStorage: UnwrapRef<
+ (typeof import("@vueuse/core"))["useLocalStorage"]
+ >;
+ readonly useMagicKeys: UnwrapRef<
+ (typeof import("@vueuse/core"))["useMagicKeys"]
+ >;
+ readonly useManualRefHistory: UnwrapRef<
+ (typeof import("@vueuse/core"))["useManualRefHistory"]
+ >;
+ readonly useMediaControls: UnwrapRef<
+ (typeof import("@vueuse/core"))["useMediaControls"]
+ >;
+ readonly useMediaQuery: UnwrapRef<
+ (typeof import("@vueuse/core"))["useMediaQuery"]
+ >;
+ readonly useMemoize: UnwrapRef<
+ (typeof import("@vueuse/core"))["useMemoize"]
+ >;
+ readonly useMemory: UnwrapRef<(typeof import("@vueuse/core"))["useMemory"]>;
+ readonly useMounted: UnwrapRef<
+ (typeof import("@vueuse/core"))["useMounted"]
+ >;
+ readonly useMouse: UnwrapRef<(typeof import("@vueuse/core"))["useMouse"]>;
+ readonly useMouseInElement: UnwrapRef<
+ (typeof import("@vueuse/core"))["useMouseInElement"]
+ >;
+ readonly useMousePressed: UnwrapRef<
+ (typeof import("@vueuse/core"))["useMousePressed"]
+ >;
+ readonly useMutationObserver: UnwrapRef<
+ (typeof import("@vueuse/core"))["useMutationObserver"]
+ >;
+ readonly useNavigatorLanguage: UnwrapRef<
+ (typeof import("@vueuse/core"))["useNavigatorLanguage"]
+ >;
+ readonly useNetwork: UnwrapRef<
+ (typeof import("@vueuse/core"))["useNetwork"]
+ >;
+ readonly useNow: UnwrapRef<(typeof import("@vueuse/core"))["useNow"]>;
+ readonly useObjectUrl: UnwrapRef<
+ (typeof import("@vueuse/core"))["useObjectUrl"]
+ >;
+ readonly useOffsetPagination: UnwrapRef<
+ (typeof import("@vueuse/core"))["useOffsetPagination"]
+ >;
+ readonly useOnline: UnwrapRef<(typeof import("@vueuse/core"))["useOnline"]>;
+ readonly usePageLeave: UnwrapRef<
+ (typeof import("@vueuse/core"))["usePageLeave"]
+ >;
+ readonly useParallax: UnwrapRef<
+ (typeof import("@vueuse/core"))["useParallax"]
+ >;
+ readonly useParentElement: UnwrapRef<
+ (typeof import("@vueuse/core"))["useParentElement"]
+ >;
+ readonly usePerformanceObserver: UnwrapRef<
+ (typeof import("@vueuse/core"))["usePerformanceObserver"]
+ >;
+ readonly usePermission: UnwrapRef<
+ (typeof import("@vueuse/core"))["usePermission"]
+ >;
+ readonly usePointer: UnwrapRef<
+ (typeof import("@vueuse/core"))["usePointer"]
+ >;
+ readonly usePointerLock: UnwrapRef<
+ (typeof import("@vueuse/core"))["usePointerLock"]
+ >;
+ readonly usePointerSwipe: UnwrapRef<
+ (typeof import("@vueuse/core"))["usePointerSwipe"]
+ >;
+ readonly usePreferredColorScheme: UnwrapRef<
+ (typeof import("@vueuse/core"))["usePreferredColorScheme"]
+ >;
+ readonly usePreferredContrast: UnwrapRef<
+ (typeof import("@vueuse/core"))["usePreferredContrast"]
+ >;
+ readonly usePreferredDark: UnwrapRef<
+ (typeof import("@vueuse/core"))["usePreferredDark"]
+ >;
+ readonly usePreferredLanguages: UnwrapRef<
+ (typeof import("@vueuse/core"))["usePreferredLanguages"]
+ >;
+ readonly usePreferredReducedMotion: UnwrapRef<
+ (typeof import("@vueuse/core"))["usePreferredReducedMotion"]
+ >;
+ readonly usePrevious: UnwrapRef<
+ (typeof import("@vueuse/core"))["usePrevious"]
+ >;
+ readonly useRafFn: UnwrapRef<(typeof import("@vueuse/core"))["useRafFn"]>;
+ readonly useRefHistory: UnwrapRef<
+ (typeof import("@vueuse/core"))["useRefHistory"]
+ >;
+ readonly useResizeObserver: UnwrapRef<
+ (typeof import("@vueuse/core"))["useResizeObserver"]
+ >;
+ readonly useRoute: UnwrapRef<(typeof import("vue-router"))["useRoute"]>;
+ readonly useRouter: UnwrapRef<(typeof import("vue-router"))["useRouter"]>;
+ readonly useScreenOrientation: UnwrapRef<
+ (typeof import("@vueuse/core"))["useScreenOrientation"]
+ >;
+ readonly useScreenSafeArea: UnwrapRef<
+ (typeof import("@vueuse/core"))["useScreenSafeArea"]
+ >;
+ readonly useScriptTag: UnwrapRef<
+ (typeof import("@vueuse/core"))["useScriptTag"]
+ >;
+ readonly useScroll: UnwrapRef<(typeof import("@vueuse/core"))["useScroll"]>;
+ readonly useScrollLock: UnwrapRef<
+ (typeof import("@vueuse/core"))["useScrollLock"]
+ >;
+ readonly useSessionStorage: UnwrapRef<
+ (typeof import("@vueuse/core"))["useSessionStorage"]
+ >;
+ readonly useShare: UnwrapRef<(typeof import("@vueuse/core"))["useShare"]>;
+ readonly useSlots: UnwrapRef<(typeof import("vue"))["useSlots"]>;
+ readonly useSorted: UnwrapRef<(typeof import("@vueuse/core"))["useSorted"]>;
+ readonly useSpeechRecognition: UnwrapRef<
+ (typeof import("@vueuse/core"))["useSpeechRecognition"]
+ >;
+ readonly useSpeechSynthesis: UnwrapRef<
+ (typeof import("@vueuse/core"))["useSpeechSynthesis"]
+ >;
+ readonly useStepper: UnwrapRef<
+ (typeof import("@vueuse/core"))["useStepper"]
+ >;
+ readonly useStorage: UnwrapRef<
+ (typeof import("@vueuse/core"))["useStorage"]
+ >;
+ readonly useStorageAsync: UnwrapRef<
+ (typeof import("@vueuse/core"))["useStorageAsync"]
+ >;
+ readonly useStyleTag: UnwrapRef<
+ (typeof import("@vueuse/core"))["useStyleTag"]
+ >;
+ readonly useSupported: UnwrapRef<
+ (typeof import("@vueuse/core"))["useSupported"]
+ >;
+ readonly useSwipe: UnwrapRef<(typeof import("@vueuse/core"))["useSwipe"]>;
+ readonly useTemplateRefsList: UnwrapRef<
+ (typeof import("@vueuse/core"))["useTemplateRefsList"]
+ >;
+ readonly useTextDirection: UnwrapRef<
+ (typeof import("@vueuse/core"))["useTextDirection"]
+ >;
+ readonly useTextSelection: UnwrapRef<
+ (typeof import("@vueuse/core"))["useTextSelection"]
+ >;
+ readonly useTextareaAutosize: UnwrapRef<
+ (typeof import("@vueuse/core"))["useTextareaAutosize"]
+ >;
+ readonly useThrottle: UnwrapRef<
+ (typeof import("@vueuse/core"))["useThrottle"]
+ >;
+ readonly useThrottleFn: UnwrapRef<
+ (typeof import("@vueuse/core"))["useThrottleFn"]
+ >;
+ readonly useThrottledRefHistory: UnwrapRef<
+ (typeof import("@vueuse/core"))["useThrottledRefHistory"]
+ >;
+ readonly useTimeAgo: UnwrapRef<
+ (typeof import("@vueuse/core"))["useTimeAgo"]
+ >;
+ readonly useTimeout: UnwrapRef<
+ (typeof import("@vueuse/core"))["useTimeout"]
+ >;
+ readonly useTimeoutFn: UnwrapRef<
+ (typeof import("@vueuse/core"))["useTimeoutFn"]
+ >;
+ readonly useTimeoutPoll: UnwrapRef<
+ (typeof import("@vueuse/core"))["useTimeoutPoll"]
+ >;
+ readonly useTimestamp: UnwrapRef<
+ (typeof import("@vueuse/core"))["useTimestamp"]
+ >;
+ readonly useTitle: UnwrapRef<(typeof import("@vueuse/core"))["useTitle"]>;
+ readonly useToNumber: UnwrapRef<
+ (typeof import("@vueuse/core"))["useToNumber"]
+ >;
+ readonly useToString: UnwrapRef<
+ (typeof import("@vueuse/core"))["useToString"]
+ >;
+ readonly useToggle: UnwrapRef<(typeof import("@vueuse/core"))["useToggle"]>;
+ readonly useTransition: UnwrapRef<
+ (typeof import("@vueuse/core"))["useTransition"]
+ >;
+ readonly useUrlSearchParams: UnwrapRef<
+ (typeof import("@vueuse/core"))["useUrlSearchParams"]
+ >;
+ readonly useUserMedia: UnwrapRef<
+ (typeof import("@vueuse/core"))["useUserMedia"]
+ >;
+ readonly useVModel: UnwrapRef<(typeof import("@vueuse/core"))["useVModel"]>;
+ readonly useVModels: UnwrapRef<
+ (typeof import("@vueuse/core"))["useVModels"]
+ >;
+ readonly useVibrate: UnwrapRef<
+ (typeof import("@vueuse/core"))["useVibrate"]
+ >;
+ readonly useVirtualList: UnwrapRef<
+ (typeof import("@vueuse/core"))["useVirtualList"]
+ >;
+ readonly useWakeLock: UnwrapRef<
+ (typeof import("@vueuse/core"))["useWakeLock"]
+ >;
+ readonly useWebNotification: UnwrapRef<
+ (typeof import("@vueuse/core"))["useWebNotification"]
+ >;
+ readonly useWebSocket: UnwrapRef<
+ (typeof import("@vueuse/core"))["useWebSocket"]
+ >;
+ readonly useWebWorker: UnwrapRef<
+ (typeof import("@vueuse/core"))["useWebWorker"]
+ >;
+ readonly useWebWorkerFn: UnwrapRef<
+ (typeof import("@vueuse/core"))["useWebWorkerFn"]
+ >;
+ readonly useWindowFocus: UnwrapRef<
+ (typeof import("@vueuse/core"))["useWindowFocus"]
+ >;
+ readonly useWindowScroll: UnwrapRef<
+ (typeof import("@vueuse/core"))["useWindowScroll"]
+ >;
+ readonly useWindowSize: UnwrapRef<
+ (typeof import("@vueuse/core"))["useWindowSize"]
+ >;
+ readonly watch: UnwrapRef<(typeof import("vue"))["watch"]>;
+ readonly watchArray: UnwrapRef<
+ (typeof import("@vueuse/core"))["watchArray"]
+ >;
+ readonly watchAtMost: UnwrapRef<
+ (typeof import("@vueuse/core"))["watchAtMost"]
+ >;
+ readonly watchDebounced: UnwrapRef<
+ (typeof import("@vueuse/core"))["watchDebounced"]
+ >;
+ readonly watchDeep: UnwrapRef<(typeof import("@vueuse/core"))["watchDeep"]>;
+ readonly watchEffect: UnwrapRef<(typeof import("vue"))["watchEffect"]>;
+ readonly watchIgnorable: UnwrapRef<
+ (typeof import("@vueuse/core"))["watchIgnorable"]
+ >;
+ readonly watchImmediate: UnwrapRef<
+ (typeof import("@vueuse/core"))["watchImmediate"]
+ >;
+ readonly watchOnce: UnwrapRef<(typeof import("@vueuse/core"))["watchOnce"]>;
+ readonly watchPausable: UnwrapRef<
+ (typeof import("@vueuse/core"))["watchPausable"]
+ >;
+ readonly watchPostEffect: UnwrapRef<
+ (typeof import("vue"))["watchPostEffect"]
+ >;
+ readonly watchSyncEffect: UnwrapRef<
+ (typeof import("vue"))["watchSyncEffect"]
+ >;
+ readonly watchThrottled: UnwrapRef<
+ (typeof import("@vueuse/core"))["watchThrottled"]
+ >;
+ readonly watchTriggerable: UnwrapRef<
+ (typeof import("@vueuse/core"))["watchTriggerable"]
+ >;
+ readonly watchWithFilter: UnwrapRef<
+ (typeof import("@vueuse/core"))["watchWithFilter"]
+ >;
+ readonly whenever: UnwrapRef<(typeof import("@vueuse/core"))["whenever"]>;
+ }
+}
+declare module "@vue/runtime-core" {
+ interface GlobalComponents {}
+ interface ComponentCustomProperties {
+ readonly EffectScope: UnwrapRef<(typeof import("vue"))["EffectScope"]>;
+ readonly ElMessage: UnwrapRef<
+ (typeof import("element-plus/es"))["ElMessage"]
+ >;
+ readonly ElMessageBox: UnwrapRef<
+ (typeof import("element-plus/es"))["ElMessageBox"]
+ >;
+ readonly acceptHMRUpdate: UnwrapRef<
+ (typeof import("pinia"))["acceptHMRUpdate"]
+ >;
+ readonly asyncComputed: UnwrapRef<
+ (typeof import("@vueuse/core"))["asyncComputed"]
+ >;
+ readonly autoResetRef: UnwrapRef<
+ (typeof import("@vueuse/core"))["autoResetRef"]
+ >;
+ readonly computed: UnwrapRef<(typeof import("vue"))["computed"]>;
+ readonly computedAsync: UnwrapRef<
+ (typeof import("@vueuse/core"))["computedAsync"]
+ >;
+ readonly computedEager: UnwrapRef<
+ (typeof import("@vueuse/core"))["computedEager"]
+ >;
+ readonly computedInject: UnwrapRef<
+ (typeof import("@vueuse/core"))["computedInject"]
+ >;
+ readonly computedWithControl: UnwrapRef<
+ (typeof import("@vueuse/core"))["computedWithControl"]
+ >;
+ readonly controlledComputed: UnwrapRef<
+ (typeof import("@vueuse/core"))["controlledComputed"]
+ >;
+ readonly controlledRef: UnwrapRef<
+ (typeof import("@vueuse/core"))["controlledRef"]
+ >;
+ readonly createApp: UnwrapRef<(typeof import("vue"))["createApp"]>;
+ readonly createEventHook: UnwrapRef<
+ (typeof import("@vueuse/core"))["createEventHook"]
+ >;
+ readonly createGlobalState: UnwrapRef<
+ (typeof import("@vueuse/core"))["createGlobalState"]
+ >;
+ readonly createInjectionState: UnwrapRef<
+ (typeof import("@vueuse/core"))["createInjectionState"]
+ >;
+ readonly createPinia: UnwrapRef<(typeof import("pinia"))["createPinia"]>;
+ readonly createReactiveFn: UnwrapRef<
+ (typeof import("@vueuse/core"))["createReactiveFn"]
+ >;
+ readonly createReusableTemplate: UnwrapRef<
+ (typeof import("@vueuse/core"))["createReusableTemplate"]
+ >;
+ readonly createSharedComposable: UnwrapRef<
+ (typeof import("@vueuse/core"))["createSharedComposable"]
+ >;
+ readonly createTemplatePromise: UnwrapRef<
+ (typeof import("@vueuse/core"))["createTemplatePromise"]
+ >;
+ readonly createUnrefFn: UnwrapRef<
+ (typeof import("@vueuse/core"))["createUnrefFn"]
+ >;
+ readonly customRef: UnwrapRef<(typeof import("vue"))["customRef"]>;
+ readonly debouncedRef: UnwrapRef<
+ (typeof import("@vueuse/core"))["debouncedRef"]
+ >;
+ readonly debouncedWatch: UnwrapRef<
+ (typeof import("@vueuse/core"))["debouncedWatch"]
+ >;
+ readonly defineAsyncComponent: UnwrapRef<
+ (typeof import("vue"))["defineAsyncComponent"]
+ >;
+ readonly defineComponent: UnwrapRef<
+ (typeof import("vue"))["defineComponent"]
+ >;
+ readonly defineStore: UnwrapRef<(typeof import("pinia"))["defineStore"]>;
+ readonly eagerComputed: UnwrapRef<
+ (typeof import("@vueuse/core"))["eagerComputed"]
+ >;
+ readonly effectScope: UnwrapRef<(typeof import("vue"))["effectScope"]>;
+ readonly extendRef: UnwrapRef<(typeof import("@vueuse/core"))["extendRef"]>;
+ readonly getActivePinia: UnwrapRef<
+ (typeof import("pinia"))["getActivePinia"]
+ >;
+ readonly getCurrentInstance: UnwrapRef<
+ (typeof import("vue"))["getCurrentInstance"]
+ >;
+ readonly getCurrentScope: UnwrapRef<
+ (typeof import("vue"))["getCurrentScope"]
+ >;
+ readonly h: UnwrapRef<(typeof import("vue"))["h"]>;
+ readonly ignorableWatch: UnwrapRef<
+ (typeof import("@vueuse/core"))["ignorableWatch"]
+ >;
+ readonly inject: UnwrapRef<(typeof import("vue"))["inject"]>;
+ readonly injectLocal: UnwrapRef<
+ (typeof import("@vueuse/core"))["injectLocal"]
+ >;
+ readonly isDefined: UnwrapRef<(typeof import("@vueuse/core"))["isDefined"]>;
+ readonly isProxy: UnwrapRef<(typeof import("vue"))["isProxy"]>;
+ readonly isReactive: UnwrapRef<(typeof import("vue"))["isReactive"]>;
+ readonly isReadonly: UnwrapRef<(typeof import("vue"))["isReadonly"]>;
+ readonly isRef: UnwrapRef<(typeof import("vue"))["isRef"]>;
+ readonly makeDestructurable: UnwrapRef<
+ (typeof import("@vueuse/core"))["makeDestructurable"]
+ >;
+ readonly mapActions: UnwrapRef<(typeof import("pinia"))["mapActions"]>;
+ readonly mapGetters: UnwrapRef<(typeof import("pinia"))["mapGetters"]>;
+ readonly mapState: UnwrapRef<(typeof import("pinia"))["mapState"]>;
+ readonly mapStores: UnwrapRef<(typeof import("pinia"))["mapStores"]>;
+ readonly mapWritableState: UnwrapRef<
+ (typeof import("pinia"))["mapWritableState"]
+ >;
+ readonly markRaw: UnwrapRef<(typeof import("vue"))["markRaw"]>;
+ readonly nextTick: UnwrapRef<(typeof import("vue"))["nextTick"]>;
+ readonly onActivated: UnwrapRef<(typeof import("vue"))["onActivated"]>;
+ readonly onBeforeMount: UnwrapRef<(typeof import("vue"))["onBeforeMount"]>;
+ readonly onBeforeRouteLeave: UnwrapRef<
+ (typeof import("vue-router"))["onBeforeRouteLeave"]
+ >;
+ readonly onBeforeRouteUpdate: UnwrapRef<
+ (typeof import("vue-router"))["onBeforeRouteUpdate"]
+ >;
+ readonly onBeforeUnmount: UnwrapRef<
+ (typeof import("vue"))["onBeforeUnmount"]
+ >;
+ readonly onBeforeUpdate: UnwrapRef<
+ (typeof import("vue"))["onBeforeUpdate"]
+ >;
+ readonly onClickOutside: UnwrapRef<
+ (typeof import("@vueuse/core"))["onClickOutside"]
+ >;
+ readonly onDeactivated: UnwrapRef<(typeof import("vue"))["onDeactivated"]>;
+ readonly onErrorCaptured: UnwrapRef<
+ (typeof import("vue"))["onErrorCaptured"]
+ >;
+ readonly onKeyStroke: UnwrapRef<
+ (typeof import("@vueuse/core"))["onKeyStroke"]
+ >;
+ readonly onLongPress: UnwrapRef<
+ (typeof import("@vueuse/core"))["onLongPress"]
+ >;
+ readonly onMounted: UnwrapRef<(typeof import("vue"))["onMounted"]>;
+ readonly onRenderTracked: UnwrapRef<
+ (typeof import("vue"))["onRenderTracked"]
+ >;
+ readonly onRenderTriggered: UnwrapRef<
+ (typeof import("vue"))["onRenderTriggered"]
+ >;
+ readonly onScopeDispose: UnwrapRef<
+ (typeof import("vue"))["onScopeDispose"]
+ >;
+ readonly onServerPrefetch: UnwrapRef<
+ (typeof import("vue"))["onServerPrefetch"]
+ >;
+ readonly onStartTyping: UnwrapRef<
+ (typeof import("@vueuse/core"))["onStartTyping"]
+ >;
+ readonly onUnmounted: UnwrapRef<(typeof import("vue"))["onUnmounted"]>;
+ readonly onUpdated: UnwrapRef<(typeof import("vue"))["onUpdated"]>;
+ readonly pausableWatch: UnwrapRef<
+ (typeof import("@vueuse/core"))["pausableWatch"]
+ >;
+ readonly provide: UnwrapRef<(typeof import("vue"))["provide"]>;
+ readonly provideLocal: UnwrapRef<
+ (typeof import("@vueuse/core"))["provideLocal"]
+ >;
+ readonly reactify: UnwrapRef<(typeof import("@vueuse/core"))["reactify"]>;
+ readonly reactifyObject: UnwrapRef<
+ (typeof import("@vueuse/core"))["reactifyObject"]
+ >;
+ readonly reactive: UnwrapRef<(typeof import("vue"))["reactive"]>;
+ readonly reactiveComputed: UnwrapRef<
+ (typeof import("@vueuse/core"))["reactiveComputed"]
+ >;
+ readonly reactiveOmit: UnwrapRef<
+ (typeof import("@vueuse/core"))["reactiveOmit"]
+ >;
+ readonly reactivePick: UnwrapRef<
+ (typeof import("@vueuse/core"))["reactivePick"]
+ >;
+ readonly readonly: UnwrapRef<(typeof import("vue"))["readonly"]>;
+ readonly ref: UnwrapRef<(typeof import("vue"))["ref"]>;
+ readonly refAutoReset: UnwrapRef<
+ (typeof import("@vueuse/core"))["refAutoReset"]
+ >;
+ readonly refDebounced: UnwrapRef<
+ (typeof import("@vueuse/core"))["refDebounced"]
+ >;
+ readonly refDefault: UnwrapRef<
+ (typeof import("@vueuse/core"))["refDefault"]
+ >;
+ readonly refThrottled: UnwrapRef<
+ (typeof import("@vueuse/core"))["refThrottled"]
+ >;
+ readonly refWithControl: UnwrapRef<
+ (typeof import("@vueuse/core"))["refWithControl"]
+ >;
+ readonly resolveComponent: UnwrapRef<
+ (typeof import("vue"))["resolveComponent"]
+ >;
+ readonly resolveRef: UnwrapRef<
+ (typeof import("@vueuse/core"))["resolveRef"]
+ >;
+ readonly resolveUnref: UnwrapRef<
+ (typeof import("@vueuse/core"))["resolveUnref"]
+ >;
+ readonly setActivePinia: UnwrapRef<
+ (typeof import("pinia"))["setActivePinia"]
+ >;
+ readonly setMapStoreSuffix: UnwrapRef<
+ (typeof import("pinia"))["setMapStoreSuffix"]
+ >;
+ readonly shallowReactive: UnwrapRef<
+ (typeof import("vue"))["shallowReactive"]
+ >;
+ readonly shallowReadonly: UnwrapRef<
+ (typeof import("vue"))["shallowReadonly"]
+ >;
+ readonly shallowRef: UnwrapRef<(typeof import("vue"))["shallowRef"]>;
+ readonly storeToRefs: UnwrapRef<(typeof import("pinia"))["storeToRefs"]>;
+ readonly syncRef: UnwrapRef<(typeof import("@vueuse/core"))["syncRef"]>;
+ readonly syncRefs: UnwrapRef<(typeof import("@vueuse/core"))["syncRefs"]>;
+ readonly templateRef: UnwrapRef<
+ (typeof import("@vueuse/core"))["templateRef"]
+ >;
+ readonly throttledRef: UnwrapRef<
+ (typeof import("@vueuse/core"))["throttledRef"]
+ >;
+ readonly throttledWatch: UnwrapRef<
+ (typeof import("@vueuse/core"))["throttledWatch"]
+ >;
+ readonly toRaw: UnwrapRef<(typeof import("vue"))["toRaw"]>;
+ readonly toReactive: UnwrapRef<
+ (typeof import("@vueuse/core"))["toReactive"]
+ >;
+ readonly toRef: UnwrapRef<(typeof import("vue"))["toRef"]>;
+ readonly toRefs: UnwrapRef<(typeof import("vue"))["toRefs"]>;
+ readonly toValue: UnwrapRef<(typeof import("vue"))["toValue"]>;
+ readonly triggerRef: UnwrapRef<(typeof import("vue"))["triggerRef"]>;
+ readonly tryOnBeforeMount: UnwrapRef<
+ (typeof import("@vueuse/core"))["tryOnBeforeMount"]
+ >;
+ readonly tryOnBeforeUnmount: UnwrapRef<
+ (typeof import("@vueuse/core"))["tryOnBeforeUnmount"]
+ >;
+ readonly tryOnMounted: UnwrapRef<
+ (typeof import("@vueuse/core"))["tryOnMounted"]
+ >;
+ readonly tryOnScopeDispose: UnwrapRef<
+ (typeof import("@vueuse/core"))["tryOnScopeDispose"]
+ >;
+ readonly tryOnUnmounted: UnwrapRef<
+ (typeof import("@vueuse/core"))["tryOnUnmounted"]
+ >;
+ readonly unref: UnwrapRef<(typeof import("vue"))["unref"]>;
+ readonly unrefElement: UnwrapRef<
+ (typeof import("@vueuse/core"))["unrefElement"]
+ >;
+ readonly until: UnwrapRef<(typeof import("@vueuse/core"))["until"]>;
+ readonly useActiveElement: UnwrapRef<
+ (typeof import("@vueuse/core"))["useActiveElement"]
+ >;
+ readonly useAnimate: UnwrapRef<
+ (typeof import("@vueuse/core"))["useAnimate"]
+ >;
+ readonly useArrayDifference: UnwrapRef<
+ (typeof import("@vueuse/core"))["useArrayDifference"]
+ >;
+ readonly useArrayEvery: UnwrapRef<
+ (typeof import("@vueuse/core"))["useArrayEvery"]
+ >;
+ readonly useArrayFilter: UnwrapRef<
+ (typeof import("@vueuse/core"))["useArrayFilter"]
+ >;
+ readonly useArrayFind: UnwrapRef<
+ (typeof import("@vueuse/core"))["useArrayFind"]
+ >;
+ readonly useArrayFindIndex: UnwrapRef<
+ (typeof import("@vueuse/core"))["useArrayFindIndex"]
+ >;
+ readonly useArrayFindLast: UnwrapRef<
+ (typeof import("@vueuse/core"))["useArrayFindLast"]
+ >;
+ readonly useArrayIncludes: UnwrapRef<
+ (typeof import("@vueuse/core"))["useArrayIncludes"]
+ >;
+ readonly useArrayJoin: UnwrapRef<
+ (typeof import("@vueuse/core"))["useArrayJoin"]
+ >;
+ readonly useArrayMap: UnwrapRef<
+ (typeof import("@vueuse/core"))["useArrayMap"]
+ >;
+ readonly useArrayReduce: UnwrapRef<
+ (typeof import("@vueuse/core"))["useArrayReduce"]
+ >;
+ readonly useArraySome: UnwrapRef<
+ (typeof import("@vueuse/core"))["useArraySome"]
+ >;
+ readonly useArrayUnique: UnwrapRef<
+ (typeof import("@vueuse/core"))["useArrayUnique"]
+ >;
+ readonly useAsyncQueue: UnwrapRef<
+ (typeof import("@vueuse/core"))["useAsyncQueue"]
+ >;
+ readonly useAsyncState: UnwrapRef<
+ (typeof import("@vueuse/core"))["useAsyncState"]
+ >;
+ readonly useAttrs: UnwrapRef<(typeof import("vue"))["useAttrs"]>;
+ readonly useBase64: UnwrapRef<(typeof import("@vueuse/core"))["useBase64"]>;
+ readonly useBattery: UnwrapRef<
+ (typeof import("@vueuse/core"))["useBattery"]
+ >;
+ readonly useBluetooth: UnwrapRef<
+ (typeof import("@vueuse/core"))["useBluetooth"]
+ >;
+ readonly useBreakpoints: UnwrapRef<
+ (typeof import("@vueuse/core"))["useBreakpoints"]
+ >;
+ readonly useBroadcastChannel: UnwrapRef<
+ (typeof import("@vueuse/core"))["useBroadcastChannel"]
+ >;
+ readonly useBrowserLocation: UnwrapRef<
+ (typeof import("@vueuse/core"))["useBrowserLocation"]
+ >;
+ readonly useCached: UnwrapRef<(typeof import("@vueuse/core"))["useCached"]>;
+ readonly useClipboard: UnwrapRef<
+ (typeof import("@vueuse/core"))["useClipboard"]
+ >;
+ readonly useClipboardItems: UnwrapRef<
+ (typeof import("@vueuse/core"))["useClipboardItems"]
+ >;
+ readonly useCloned: UnwrapRef<(typeof import("@vueuse/core"))["useCloned"]>;
+ readonly useColorMode: UnwrapRef<
+ (typeof import("@vueuse/core"))["useColorMode"]
+ >;
+ readonly useConfirmDialog: UnwrapRef<
+ (typeof import("@vueuse/core"))["useConfirmDialog"]
+ >;
+ readonly useCounter: UnwrapRef<
+ (typeof import("@vueuse/core"))["useCounter"]
+ >;
+ readonly useCssModule: UnwrapRef<(typeof import("vue"))["useCssModule"]>;
+ readonly useCssVar: UnwrapRef<(typeof import("@vueuse/core"))["useCssVar"]>;
+ readonly useCssVars: UnwrapRef<(typeof import("vue"))["useCssVars"]>;
+ readonly useCurrentElement: UnwrapRef<
+ (typeof import("@vueuse/core"))["useCurrentElement"]
+ >;
+ readonly useCycleList: UnwrapRef<
+ (typeof import("@vueuse/core"))["useCycleList"]
+ >;
+ readonly useDark: UnwrapRef<(typeof import("@vueuse/core"))["useDark"]>;
+ readonly useDateFormat: UnwrapRef<
+ (typeof import("@vueuse/core"))["useDateFormat"]
+ >;
+ readonly useDebounce: UnwrapRef<
+ (typeof import("@vueuse/core"))["useDebounce"]
+ >;
+ readonly useDebounceFn: UnwrapRef<
+ (typeof import("@vueuse/core"))["useDebounceFn"]
+ >;
+ readonly useDebouncedRefHistory: UnwrapRef<
+ (typeof import("@vueuse/core"))["useDebouncedRefHistory"]
+ >;
+ readonly useDeviceMotion: UnwrapRef<
+ (typeof import("@vueuse/core"))["useDeviceMotion"]
+ >;
+ readonly useDeviceOrientation: UnwrapRef<
+ (typeof import("@vueuse/core"))["useDeviceOrientation"]
+ >;
+ readonly useDevicePixelRatio: UnwrapRef<
+ (typeof import("@vueuse/core"))["useDevicePixelRatio"]
+ >;
+ readonly useDevicesList: UnwrapRef<
+ (typeof import("@vueuse/core"))["useDevicesList"]
+ >;
+ readonly useDisplayMedia: UnwrapRef<
+ (typeof import("@vueuse/core"))["useDisplayMedia"]
+ >;
+ readonly useDocumentVisibility: UnwrapRef<
+ (typeof import("@vueuse/core"))["useDocumentVisibility"]
+ >;
+ readonly useDraggable: UnwrapRef<
+ (typeof import("@vueuse/core"))["useDraggable"]
+ >;
+ readonly useDropZone: UnwrapRef<
+ (typeof import("@vueuse/core"))["useDropZone"]
+ >;
+ readonly useElementBounding: UnwrapRef<
+ (typeof import("@vueuse/core"))["useElementBounding"]
+ >;
+ readonly useElementByPoint: UnwrapRef<
+ (typeof import("@vueuse/core"))["useElementByPoint"]
+ >;
+ readonly useElementHover: UnwrapRef<
+ (typeof import("@vueuse/core"))["useElementHover"]
+ >;
+ readonly useElementSize: UnwrapRef<
+ (typeof import("@vueuse/core"))["useElementSize"]
+ >;
+ readonly useElementVisibility: UnwrapRef<
+ (typeof import("@vueuse/core"))["useElementVisibility"]
+ >;
+ readonly useEventBus: UnwrapRef<
+ (typeof import("@vueuse/core"))["useEventBus"]
+ >;
+ readonly useEventListener: UnwrapRef<
+ (typeof import("@vueuse/core"))["useEventListener"]
+ >;
+ readonly useEventSource: UnwrapRef<
+ (typeof import("@vueuse/core"))["useEventSource"]
+ >;
+ readonly useEyeDropper: UnwrapRef<
+ (typeof import("@vueuse/core"))["useEyeDropper"]
+ >;
+ readonly useFavicon: UnwrapRef<
+ (typeof import("@vueuse/core"))["useFavicon"]
+ >;
+ readonly useFetch: UnwrapRef<(typeof import("@vueuse/core"))["useFetch"]>;
+ readonly useFileDialog: UnwrapRef<
+ (typeof import("@vueuse/core"))["useFileDialog"]
+ >;
+ readonly useFileSystemAccess: UnwrapRef<
+ (typeof import("@vueuse/core"))["useFileSystemAccess"]
+ >;
+ readonly useFocus: UnwrapRef<(typeof import("@vueuse/core"))["useFocus"]>;
+ readonly useFocusWithin: UnwrapRef<
+ (typeof import("@vueuse/core"))["useFocusWithin"]
+ >;
+ readonly useFps: UnwrapRef<(typeof import("@vueuse/core"))["useFps"]>;
+ readonly useFullscreen: UnwrapRef<
+ (typeof import("@vueuse/core"))["useFullscreen"]
+ >;
+ readonly useGamepad: UnwrapRef<
+ (typeof import("@vueuse/core"))["useGamepad"]
+ >;
+ readonly useGeolocation: UnwrapRef<
+ (typeof import("@vueuse/core"))["useGeolocation"]
+ >;
+ readonly useI18n: UnwrapRef<(typeof import("vue-i18n"))["useI18n"]>;
+ readonly useIdle: UnwrapRef<(typeof import("@vueuse/core"))["useIdle"]>;
+ readonly useImage: UnwrapRef<(typeof import("@vueuse/core"))["useImage"]>;
+ readonly useInfiniteScroll: UnwrapRef<
+ (typeof import("@vueuse/core"))["useInfiniteScroll"]
+ >;
+ readonly useIntersectionObserver: UnwrapRef<
+ (typeof import("@vueuse/core"))["useIntersectionObserver"]
+ >;
+ readonly useInterval: UnwrapRef<
+ (typeof import("@vueuse/core"))["useInterval"]
+ >;
+ readonly useIntervalFn: UnwrapRef<
+ (typeof import("@vueuse/core"))["useIntervalFn"]
+ >;
+ readonly useKeyModifier: UnwrapRef<
+ (typeof import("@vueuse/core"))["useKeyModifier"]
+ >;
+ readonly useLastChanged: UnwrapRef<
+ (typeof import("@vueuse/core"))["useLastChanged"]
+ >;
+ readonly useLink: UnwrapRef<(typeof import("vue-router"))["useLink"]>;
+ readonly useLocalStorage: UnwrapRef<
+ (typeof import("@vueuse/core"))["useLocalStorage"]
+ >;
+ readonly useMagicKeys: UnwrapRef<
+ (typeof import("@vueuse/core"))["useMagicKeys"]
+ >;
+ readonly useManualRefHistory: UnwrapRef<
+ (typeof import("@vueuse/core"))["useManualRefHistory"]
+ >;
+ readonly useMediaControls: UnwrapRef<
+ (typeof import("@vueuse/core"))["useMediaControls"]
+ >;
+ readonly useMediaQuery: UnwrapRef<
+ (typeof import("@vueuse/core"))["useMediaQuery"]
+ >;
+ readonly useMemoize: UnwrapRef<
+ (typeof import("@vueuse/core"))["useMemoize"]
+ >;
+ readonly useMemory: UnwrapRef<(typeof import("@vueuse/core"))["useMemory"]>;
+ readonly useMounted: UnwrapRef<
+ (typeof import("@vueuse/core"))["useMounted"]
+ >;
+ readonly useMouse: UnwrapRef<(typeof import("@vueuse/core"))["useMouse"]>;
+ readonly useMouseInElement: UnwrapRef<
+ (typeof import("@vueuse/core"))["useMouseInElement"]
+ >;
+ readonly useMousePressed: UnwrapRef<
+ (typeof import("@vueuse/core"))["useMousePressed"]
+ >;
+ readonly useMutationObserver: UnwrapRef<
+ (typeof import("@vueuse/core"))["useMutationObserver"]
+ >;
+ readonly useNavigatorLanguage: UnwrapRef<
+ (typeof import("@vueuse/core"))["useNavigatorLanguage"]
+ >;
+ readonly useNetwork: UnwrapRef<
+ (typeof import("@vueuse/core"))["useNetwork"]
+ >;
+ readonly useNow: UnwrapRef<(typeof import("@vueuse/core"))["useNow"]>;
+ readonly useObjectUrl: UnwrapRef<
+ (typeof import("@vueuse/core"))["useObjectUrl"]
+ >;
+ readonly useOffsetPagination: UnwrapRef<
+ (typeof import("@vueuse/core"))["useOffsetPagination"]
+ >;
+ readonly useOnline: UnwrapRef<(typeof import("@vueuse/core"))["useOnline"]>;
+ readonly usePageLeave: UnwrapRef<
+ (typeof import("@vueuse/core"))["usePageLeave"]
+ >;
+ readonly useParallax: UnwrapRef<
+ (typeof import("@vueuse/core"))["useParallax"]
+ >;
+ readonly useParentElement: UnwrapRef<
+ (typeof import("@vueuse/core"))["useParentElement"]
+ >;
+ readonly usePerformanceObserver: UnwrapRef<
+ (typeof import("@vueuse/core"))["usePerformanceObserver"]
+ >;
+ readonly usePermission: UnwrapRef<
+ (typeof import("@vueuse/core"))["usePermission"]
+ >;
+ readonly usePointer: UnwrapRef<
+ (typeof import("@vueuse/core"))["usePointer"]
+ >;
+ readonly usePointerLock: UnwrapRef<
+ (typeof import("@vueuse/core"))["usePointerLock"]
+ >;
+ readonly usePointerSwipe: UnwrapRef<
+ (typeof import("@vueuse/core"))["usePointerSwipe"]
+ >;
+ readonly usePreferredColorScheme: UnwrapRef<
+ (typeof import("@vueuse/core"))["usePreferredColorScheme"]
+ >;
+ readonly usePreferredContrast: UnwrapRef<
+ (typeof import("@vueuse/core"))["usePreferredContrast"]
+ >;
+ readonly usePreferredDark: UnwrapRef<
+ (typeof import("@vueuse/core"))["usePreferredDark"]
+ >;
+ readonly usePreferredLanguages: UnwrapRef<
+ (typeof import("@vueuse/core"))["usePreferredLanguages"]
+ >;
+ readonly usePreferredReducedMotion: UnwrapRef<
+ (typeof import("@vueuse/core"))["usePreferredReducedMotion"]
+ >;
+ readonly usePrevious: UnwrapRef<
+ (typeof import("@vueuse/core"))["usePrevious"]
+ >;
+ readonly useRafFn: UnwrapRef<(typeof import("@vueuse/core"))["useRafFn"]>;
+ readonly useRefHistory: UnwrapRef<
+ (typeof import("@vueuse/core"))["useRefHistory"]
+ >;
+ readonly useResizeObserver: UnwrapRef<
+ (typeof import("@vueuse/core"))["useResizeObserver"]
+ >;
+ readonly useRoute: UnwrapRef<(typeof import("vue-router"))["useRoute"]>;
+ readonly useRouter: UnwrapRef<(typeof import("vue-router"))["useRouter"]>;
+ readonly useScreenOrientation: UnwrapRef<
+ (typeof import("@vueuse/core"))["useScreenOrientation"]
+ >;
+ readonly useScreenSafeArea: UnwrapRef<
+ (typeof import("@vueuse/core"))["useScreenSafeArea"]
+ >;
+ readonly useScriptTag: UnwrapRef<
+ (typeof import("@vueuse/core"))["useScriptTag"]
+ >;
+ readonly useScroll: UnwrapRef<(typeof import("@vueuse/core"))["useScroll"]>;
+ readonly useScrollLock: UnwrapRef<
+ (typeof import("@vueuse/core"))["useScrollLock"]
+ >;
+ readonly useSessionStorage: UnwrapRef<
+ (typeof import("@vueuse/core"))["useSessionStorage"]
+ >;
+ readonly useShare: UnwrapRef<(typeof import("@vueuse/core"))["useShare"]>;
+ readonly useSlots: UnwrapRef<(typeof import("vue"))["useSlots"]>;
+ readonly useSorted: UnwrapRef<(typeof import("@vueuse/core"))["useSorted"]>;
+ readonly useSpeechRecognition: UnwrapRef<
+ (typeof import("@vueuse/core"))["useSpeechRecognition"]
+ >;
+ readonly useSpeechSynthesis: UnwrapRef<
+ (typeof import("@vueuse/core"))["useSpeechSynthesis"]
+ >;
+ readonly useStepper: UnwrapRef<
+ (typeof import("@vueuse/core"))["useStepper"]
+ >;
+ readonly useStorage: UnwrapRef<
+ (typeof import("@vueuse/core"))["useStorage"]
+ >;
+ readonly useStorageAsync: UnwrapRef<
+ (typeof import("@vueuse/core"))["useStorageAsync"]
+ >;
+ readonly useStyleTag: UnwrapRef<
+ (typeof import("@vueuse/core"))["useStyleTag"]
+ >;
+ readonly useSupported: UnwrapRef<
+ (typeof import("@vueuse/core"))["useSupported"]
+ >;
+ readonly useSwipe: UnwrapRef<(typeof import("@vueuse/core"))["useSwipe"]>;
+ readonly useTemplateRefsList: UnwrapRef<
+ (typeof import("@vueuse/core"))["useTemplateRefsList"]
+ >;
+ readonly useTextDirection: UnwrapRef<
+ (typeof import("@vueuse/core"))["useTextDirection"]
+ >;
+ readonly useTextSelection: UnwrapRef<
+ (typeof import("@vueuse/core"))["useTextSelection"]
+ >;
+ readonly useTextareaAutosize: UnwrapRef<
+ (typeof import("@vueuse/core"))["useTextareaAutosize"]
+ >;
+ readonly useThrottle: UnwrapRef<
+ (typeof import("@vueuse/core"))["useThrottle"]
+ >;
+ readonly useThrottleFn: UnwrapRef<
+ (typeof import("@vueuse/core"))["useThrottleFn"]
+ >;
+ readonly useThrottledRefHistory: UnwrapRef<
+ (typeof import("@vueuse/core"))["useThrottledRefHistory"]
+ >;
+ readonly useTimeAgo: UnwrapRef<
+ (typeof import("@vueuse/core"))["useTimeAgo"]
+ >;
+ readonly useTimeout: UnwrapRef<
+ (typeof import("@vueuse/core"))["useTimeout"]
+ >;
+ readonly useTimeoutFn: UnwrapRef<
+ (typeof import("@vueuse/core"))["useTimeoutFn"]
+ >;
+ readonly useTimeoutPoll: UnwrapRef<
+ (typeof import("@vueuse/core"))["useTimeoutPoll"]
+ >;
+ readonly useTimestamp: UnwrapRef<
+ (typeof import("@vueuse/core"))["useTimestamp"]
+ >;
+ readonly useTitle: UnwrapRef<(typeof import("@vueuse/core"))["useTitle"]>;
+ readonly useToNumber: UnwrapRef<
+ (typeof import("@vueuse/core"))["useToNumber"]
+ >;
+ readonly useToString: UnwrapRef<
+ (typeof import("@vueuse/core"))["useToString"]
+ >;
+ readonly useToggle: UnwrapRef<(typeof import("@vueuse/core"))["useToggle"]>;
+ readonly useTransition: UnwrapRef<
+ (typeof import("@vueuse/core"))["useTransition"]
+ >;
+ readonly useUrlSearchParams: UnwrapRef<
+ (typeof import("@vueuse/core"))["useUrlSearchParams"]
+ >;
+ readonly useUserMedia: UnwrapRef<
+ (typeof import("@vueuse/core"))["useUserMedia"]
+ >;
+ readonly useVModel: UnwrapRef<(typeof import("@vueuse/core"))["useVModel"]>;
+ readonly useVModels: UnwrapRef<
+ (typeof import("@vueuse/core"))["useVModels"]
+ >;
+ readonly useVibrate: UnwrapRef<
+ (typeof import("@vueuse/core"))["useVibrate"]
+ >;
+ readonly useVirtualList: UnwrapRef<
+ (typeof import("@vueuse/core"))["useVirtualList"]
+ >;
+ readonly useWakeLock: UnwrapRef<
+ (typeof import("@vueuse/core"))["useWakeLock"]
+ >;
+ readonly useWebNotification: UnwrapRef<
+ (typeof import("@vueuse/core"))["useWebNotification"]
+ >;
+ readonly useWebSocket: UnwrapRef<
+ (typeof import("@vueuse/core"))["useWebSocket"]
+ >;
+ readonly useWebWorker: UnwrapRef<
+ (typeof import("@vueuse/core"))["useWebWorker"]
+ >;
+ readonly useWebWorkerFn: UnwrapRef<
+ (typeof import("@vueuse/core"))["useWebWorkerFn"]
+ >;
+ readonly useWindowFocus: UnwrapRef<
+ (typeof import("@vueuse/core"))["useWindowFocus"]
+ >;
+ readonly useWindowScroll: UnwrapRef<
+ (typeof import("@vueuse/core"))["useWindowScroll"]
+ >;
+ readonly useWindowSize: UnwrapRef<
+ (typeof import("@vueuse/core"))["useWindowSize"]
+ >;
+ readonly watch: UnwrapRef<(typeof import("vue"))["watch"]>;
+ readonly watchArray: UnwrapRef<
+ (typeof import("@vueuse/core"))["watchArray"]
+ >;
+ readonly watchAtMost: UnwrapRef<
+ (typeof import("@vueuse/core"))["watchAtMost"]
+ >;
+ readonly watchDebounced: UnwrapRef<
+ (typeof import("@vueuse/core"))["watchDebounced"]
+ >;
+ readonly watchDeep: UnwrapRef<(typeof import("@vueuse/core"))["watchDeep"]>;
+ readonly watchEffect: UnwrapRef<(typeof import("vue"))["watchEffect"]>;
+ readonly watchIgnorable: UnwrapRef<
+ (typeof import("@vueuse/core"))["watchIgnorable"]
+ >;
+ readonly watchImmediate: UnwrapRef<
+ (typeof import("@vueuse/core"))["watchImmediate"]
+ >;
+ readonly watchOnce: UnwrapRef<(typeof import("@vueuse/core"))["watchOnce"]>;
+ readonly watchPausable: UnwrapRef<
+ (typeof import("@vueuse/core"))["watchPausable"]
+ >;
+ readonly watchPostEffect: UnwrapRef<
+ (typeof import("vue"))["watchPostEffect"]
+ >;
+ readonly watchSyncEffect: UnwrapRef<
+ (typeof import("vue"))["watchSyncEffect"]
+ >;
+ readonly watchThrottled: UnwrapRef<
+ (typeof import("@vueuse/core"))["watchThrottled"]
+ >;
+ readonly watchTriggerable: UnwrapRef<
+ (typeof import("@vueuse/core"))["watchTriggerable"]
+ >;
+ readonly watchWithFilter: UnwrapRef<
+ (typeof import("@vueuse/core"))["watchWithFilter"]
+ >;
+ readonly whenever: UnwrapRef<(typeof import("@vueuse/core"))["whenever"]>;
+ }
+}
diff --git a/src/types/components.d.ts b/src/types/components.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..eecb0e332807510642119e46085a9e6472fbb51a
--- /dev/null
+++ b/src/types/components.d.ts
@@ -0,0 +1,108 @@
+/* eslint-disable */
+/* prettier-ignore */
+// @ts-nocheck
+// Generated by unplugin-vue-components
+// Read more: https://github.com/vuejs/core/pull/3399
+export {}
+
+declare module "vue" {
+ export interface GlobalComponents {
+ AppLink: (typeof import("./../components/AppLink/index.vue"))["default"];
+ AppMain: (typeof import("./../layout/components/AppMain/index.vue"))["default"];
+ VisitTrend: (typeof import("./../views/dashboard/components/VisitTrend.vue"))["default"];
+ Breadcrumb: (typeof import("./../components/Breadcrumb/index.vue"))["default"];
+ CopyButton: (typeof import("./../components/CopyButton/index.vue"))["default"];
+ CURD: (typeof import("./../components/CURD/index.vue"))["default"];
+ DeptTree: (typeof import("./../views/system/user/components/dept-tree.vue"))["default"];
+ UserImport: (typeof import("./../views/system/user/components/user-import.vue"))["default"];
+ Dictionary: (typeof import("./../components/Dictionary/index.vue"))["default"];
+ DictItem: (typeof import("./../views/system/dict/components/dict-item.vue"))["default"];
+ ElBacktop: (typeof import("element-plus/es"))["ElBacktop"];
+ ElBreadcrumb: (typeof import("element-plus/es"))["ElBreadcrumb"];
+ ElBreadcrumbItem: (typeof import("element-plus/es"))["ElBreadcrumbItem"];
+ ElButton: (typeof import("element-plus/es"))["ElButton"];
+ ElCard: (typeof import("element-plus/es"))["ElCard"];
+ ElCheckbox: (typeof import("element-plus/es"))["ElCheckbox"];
+ ElCheckboxGroup: (typeof import("element-plus/es"))["ElCheckboxGroup"];
+ ElCol: (typeof import("element-plus/es"))["ElCol"];
+ ElColorPicker: (typeof import("element-plus/es"))["ElColorPicker"];
+ ElConfigProvider: (typeof import("element-plus/es"))["ElConfigProvider"];
+ ElDatePicker: (typeof import("element-plus/es"))["ElDatePicker"];
+ ElDialog: (typeof import("element-plus/es"))["ElDialog"];
+ ElDivider: (typeof import("element-plus/es"))["ElDivider"];
+ ElDrawer: (typeof import("element-plus/es"))["ElDrawer"];
+ ElDropdown: (typeof import("element-plus/es"))["ElDropdown"];
+ ElDropdownItem: (typeof import("element-plus/es"))["ElDropdownItem"];
+ ElDropdownMenu: (typeof import("element-plus/es"))["ElDropdownMenu"];
+ ElForm: (typeof import("element-plus/es"))["ElForm"];
+ ElFormItem: (typeof import("element-plus/es"))["ElFormItem"];
+ ElIcon: (typeof import("element-plus/es"))["ElIcon"];
+ ElImage: (typeof import("element-plus/es"))["ElImage"];
+ ElInput: (typeof import("element-plus/es"))["ElInput"];
+ ElInputNumber: (typeof import("element-plus/es"))["ElInputNumber"];
+ ElLink: (typeof import("element-plus/es"))["ElLink"];
+ ElMenu: (typeof import("element-plus/es"))["ElMenu"];
+ ElMenuItem: (typeof import("element-plus/es"))["ElMenuItem"];
+ ElOption: (typeof import("element-plus/es"))["ElOption"];
+ ElPagination: (typeof import("element-plus/es"))["ElPagination"];
+ ElPopover: (typeof import("element-plus/es"))["ElPopover"];
+ ElRadio: (typeof import("element-plus/es"))["ElRadio"];
+ ElRadioGroup: (typeof import("element-plus/es"))["ElRadioGroup"];
+ ElRow: (typeof import("element-plus/es"))["ElRow"];
+ ElScrollbar: (typeof import("element-plus/es"))["ElScrollbar"];
+ ElSelect: (typeof import("element-plus/es"))["ElSelect"];
+ ElStatistic: (typeof import("element-plus/es"))["ElStatistic"];
+ ElSubMenu: (typeof import("element-plus/es"))["ElSubMenu"];
+ ElSwitch: (typeof import("element-plus/es"))["ElSwitch"];
+ ElTable: (typeof import("element-plus/es"))["ElTable"];
+ ElTableColumn: (typeof import("element-plus/es"))["ElTableColumn"];
+ ElTag: (typeof import("element-plus/es"))["ElTag"];
+ ElText: (typeof import("element-plus/es"))["ElText"];
+ ElTooltip: (typeof import("element-plus/es"))["ElTooltip"];
+ ElTreeSelect: (typeof import("element-plus/es"))["ElTreeSelect"];
+ ElUpload: (typeof import("element-plus/es"))["ElUpload"];
+ ElWatermark: (typeof import("element-plus/es"))["ElWatermark"];
+ ElSkeleton: (typeof import("element-plus/es"))["ElSkeleton"];
+ Form: (typeof import("./../components/CURD/Form.vue"))["default"];
+ FunnelChart: (typeof import("./../views/dashboard/components/FunnelChart.vue"))["default"];
+ GithubCorner: (typeof import("./../components/GithubCorner/index.vue"))["default"];
+ Hamburger: (typeof import("./../components/Hamburger/index.vue"))["default"];
+ IconSelect: (typeof import("./../components/IconSelect/index.vue"))["default"];
+ IEpArrowDown: (typeof import("~icons/ep/arrow-down"))["default"];
+ IEpArrowUp: (typeof import("~icons/ep/arrow-up"))["default"];
+ IEpClose: (typeof import("~icons/ep/close"))["default"];
+ IEpDownload: (typeof import("~icons/ep/download"))["default"];
+ LangSelect: (typeof import("./../components/LangSelect/index.vue"))["default"];
+ MenuSearch: (typeof import("./../components/MenuSearch/index.vue"))["default"];
+ LayoutSelect: (typeof import("./../layout/components/Settings/components/LayoutSelect.vue"))["default"];
+ MultiUpload: (typeof import("./../components/Upload/MultiUpload.vue"))["default"];
+ NavBar: (typeof import("./../layout/components/NavBar/index.vue"))["default"];
+ NavbarAction: (typeof import("./../layout/components/NavBar/components/NavbarAction.vue"))["default"];
+ PageContent: (typeof import("./../components/CURD/PageContent.vue"))["default"];
+ PageForm: (typeof import("./../components/CURD/PageForm.vue"))["default"];
+ PageModal: (typeof import("./../components/CURD/PageModal.vue"))["default"];
+ PageSearch: (typeof import("./../components/CURD/PageSearch.vue"))["default"];
+ Pagination: (typeof import("./../components/Pagination/index.vue"))["default"];
+ PieChart: (typeof import("./../views/dashboard/components/PieChart.vue"))["default"];
+ RadarChart: (typeof import("./../views/dashboard/components/RadarChart.vue"))["default"];
+ RouterLink: (typeof import("vue-router"))["RouterLink"];
+ RouterView: (typeof import("vue-router"))["RouterView"];
+ Settings: (typeof import("./../layout/components/Settings/index.vue"))["default"];
+ Sidebar: (typeof import("./../layout/components/Sidebar/index.vue"))["default"];
+ SidebarLogo: (typeof import("./../layout/components/Sidebar/components/SidebarLogo.vue"))["default"];
+ SidebarMenu: (typeof import("./../layout/components/Sidebar/components/SidebarMenu.vue"))["default"];
+ SidebarMenuItem: (typeof import("./../layout/components/Sidebar/components/SidebarMenuItem.vue"))["default"];
+ SidebarMenuItemTitle: (typeof import("./../layout/components/Sidebar/components/SidebarMenuItemTitle.vue"))["default"];
+ SidebarMixTopMenu: (typeof import("./../layout/components/Sidebar/components/SidebarMixTopMenu.vue"))["default"];
+ SingleUpload: (typeof import("./../components/Upload/SingleUpload.vue"))["default"];
+ SizeSelect: (typeof import("./../components/SizeSelect/index.vue"))["default"];
+ SvgIcon: (typeof import("./../components/SvgIcon/index.vue"))["default"];
+ TableSelect: (typeof import("./../components/TableSelect/index.vue"))["default"];
+ TagsView: (typeof import("./../layout/components/TagsView/index.vue"))["default"];
+ ThemeColorPicker: (typeof import("./../layout/components/Settings/components/ThemeColorPicker.vue"))["default"];
+ WangEditor: (typeof import("./../components/WangEditor/index.vue"))["default"];
+ }
+ export interface ComponentCustomProperties {
+ vLoading: (typeof import("element-plus/es"))["ElLoadingDirective"];
+ }
+}
diff --git a/src/types/env.d.ts b/src/types/env.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..7ed1377812750c7eb4d82106b340bea9b7fad2ba
--- /dev/null
+++ b/src/types/env.d.ts
@@ -0,0 +1,40 @@
+// https://cn.vitejs.dev/guide/env-and-mode
+
+declare module "*.vue" {
+ import { DefineComponent } from "vue";
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/ban-types
+ const component: DefineComponent<{}, {}, any>;
+ export default component;
+}
+
+// TypeScript 类型提示都为 string: https://github.com/vitejs/vite/issues/6930
+interface ImportMetaEnv {
+ /** 应用端口 */
+ VITE_APP_PORT: number;
+ /** API 基础路径(代理前缀) */
+ VITE_APP_BASE_API: string;
+ /** API 地址 */
+ VITE_APP_API_URL: string;
+ /** 是否开启 Mock 服务 */
+ VITE_MOCK_DEV_SERVER: boolean;
+}
+
+interface ImportMeta {
+ readonly env: ImportMetaEnv;
+}
+
+/**
+ * 平台的名称、版本、运行所需的`node`版本、依赖、构建时间的类型提示
+ */
+declare const __APP_INFO__: {
+ pkg: {
+ name: string;
+ version: string;
+ engines: {
+ node: string;
+ };
+ dependencies: Record;
+ devDependencies: Record;
+ };
+ buildTimestamp: number;
+};
diff --git a/src/types/global.d.ts b/src/types/global.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..17b7c2ac62e36e79b43047d431590182a724bdc0
--- /dev/null
+++ b/src/types/global.d.ts
@@ -0,0 +1,91 @@
+declare global {
+ /**
+ * 响应数据
+ */
+ interface ResponseData {
+ code: string;
+ data: T;
+ msg: string;
+ }
+
+ /**
+ * 分页查询参数
+ */
+ interface PageQuery {
+ pageNum: number;
+ pageSize: number;
+ }
+
+ /**
+ * 分页响应对象
+ */
+ interface PageResult {
+ /** 数据列表 */
+ list: T;
+ /** 总数 */
+ total: number;
+ }
+
+ /**
+ * 页签对象
+ */
+ interface TagView {
+ /** 页签名称 */
+ name: string;
+ /** 页签标题 */
+ title: string;
+ /** 页签路由路径 */
+ path: string;
+ /** 页签路由完整路径 */
+ fullPath: string;
+ /** 页签图标 */
+ icon?: string;
+ /** 是否固定页签 */
+ affix?: boolean;
+ /** 是否开启缓存 */
+ keepAlive?: boolean;
+ /** 路由查询参数 */
+ query?: any;
+ }
+
+ /**
+ * 系统设置
+ */
+ interface AppSettings {
+ /** 系统标题 */
+ title: string;
+ /** 系统版本 */
+ version: string;
+ /** 是否显示设置 */
+ showSettings: boolean;
+ /** 是否固定头部 */
+ fixedHeader: boolean;
+ /** 是否显示多标签导航 */
+ tagsView: boolean;
+ /** 是否显示侧边栏Logo */
+ sidebarLogo: boolean;
+ /** 主题颜色 */
+ themeColor: string;
+ /** 主题模式(dark|light) */
+ theme: string;
+ /** 语言( zh-cn| en) */
+ language: string;
+ /** 是否开启水印 */
+ watermarkEnabled: boolean;
+ /** 水印内容 */
+ watermarkContent: string;
+ }
+
+ /**
+ * 组件数据源
+ */
+ interface OptionType {
+ /** 值 */
+ value: string | number;
+ /** 文本 */
+ label: string;
+ /** 子列表 */
+ children?: OptionType[];
+ }
+}
+export {};
diff --git a/src/types/router.d.ts b/src/types/router.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..a175ea18d2bc052808b6268e032416338b0b07bf
--- /dev/null
+++ b/src/types/router.d.ts
@@ -0,0 +1,54 @@
+import "vue-router";
+
+declare module "vue-router" {
+ // https://router.vuejs.org/zh/guide/advanced/meta.html#typescript
+ // 可以通过扩展 RouteMeta 接口来输入 meta 字段
+ interface RouteMeta {
+ /**
+ * 菜单名称
+ * @example 'Dashboard'
+ */
+ title?: string;
+
+ /**
+ * 菜单图标
+ * @example 'el-icon-edit'
+ */
+ icon?: string;
+
+ /**
+ * 是否隐藏菜单项
+ * true 隐藏, false 显示
+ * @default false
+ */
+ hidden?: boolean;
+
+ /**
+ * 始终显示父级菜单,即使只有一个子菜单
+ * true 显示父级菜单, false 隐藏父级菜单,显示唯一子节点
+ * @default false
+ */
+ alwaysShow?: boolean;
+
+ /**
+ * 是否固定在页签上
+ * true 固定, false 不固定
+ * @default false
+ */
+ affix?: boolean;
+
+ /**
+ * 是否缓存页面
+ * true 缓存, false 不缓存
+ * @default false
+ */
+ keepAlive?: boolean;
+
+ /**
+ * 是否在面包屑导航中隐藏
+ * true 隐藏, false 显示
+ * @default false
+ */
+ breadcrumb?: boolean;
+ }
+}
diff --git a/src/types/socket.d.ts b/src/types/socket.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..15a8ed78b4fbfa8f153889ae7817e94ac88bfaf5
--- /dev/null
+++ b/src/types/socket.d.ts
@@ -0,0 +1,6 @@
+// https://github.com/sockjs/sockjs-client/issues/565
+
+declare module "sockjs-client/dist/sockjs.min.js" {
+ import Client from "sockjs-client";
+ export default Client;
+}
diff --git a/src/utils/bytesToSize.ts b/src/utils/bytesToSize.ts
new file mode 100644
index 0000000000000000000000000000000000000000..78a101cad81b2f04e00d74d08163c09309b1edc7
--- /dev/null
+++ b/src/utils/bytesToSize.ts
@@ -0,0 +1,15 @@
+export function bytesToSize(bytes: number) {
+ const sizes = ["B", "KB", "MB", "GB", "TB"];
+ if (bytes === 0) return "0 B";
+ const i = Math.floor(Math.log(bytes) / Math.log(1024));
+ return (bytes / Math.pow(1024, i)).toFixed() + " " + sizes[i];
+}
+
+export function isMaxMemoryOut(bytes: number, moreNum: number) {
+ let flag = false;
+ if (Number((bytes / 1024 / 1024 / 1024).toFixed(3)) >= moreNum) {
+ flag = true;
+ }
+
+ return flag;
+}
diff --git a/src/utils/convertUTCToLocalTime.ts b/src/utils/convertUTCToLocalTime.ts
new file mode 100644
index 0000000000000000000000000000000000000000..079e36c782e038f8ecce0a9229435cecc324762c
--- /dev/null
+++ b/src/utils/convertUTCToLocalTime.ts
@@ -0,0 +1,34 @@
+export function convertUTCToLocalTime(utcDateString: string | number | Date) {
+ const date = new Date(utcDateString);
+ date.setMinutes(date.getMinutes() + 8 * 60);
+
+ // 使用toLocaleString可以按照本地时区进行格式化
+ const localTimer = date
+ .toLocaleString("zh-CN", {
+ hour12: false,
+ year: "numeric",
+ month: "2-digit",
+ day: "2-digit",
+ hour: "2-digit",
+ minute: "2-digit",
+ })
+ .replace(/\//g, "-");
+ return localTimer;
+}
+export function uTCToLocalTime(utcDateString: string | number | Date) {
+ const date = new Date(utcDateString);
+ date.setMinutes(date.getMinutes() - 8 * 60);
+
+ // 使用toLocaleString可以按照本地时区进行格式化
+ const localTimer = date
+ .toLocaleString("zh-CN", {
+ hour12: false,
+ year: "numeric",
+ month: "2-digit",
+ day: "2-digit",
+ hour: "2-digit",
+ minute: "2-digit",
+ })
+ .replace(/\//g, "-");
+ return localTimer;
+}
diff --git a/src/utils/debounce.js b/src/utils/debounce.js
new file mode 100644
index 0000000000000000000000000000000000000000..3c9ad8ab94fa534dff8d97bb7f6070e78e2c7091
--- /dev/null
+++ b/src/utils/debounce.js
@@ -0,0 +1,10 @@
+// 防抖
+export function debounce(func, wait = 1000) {
+ let timeout = null;
+ return function (...args) {
+ clearTimeout(timeout);
+ timeout = setTimeout(() => {
+ func.apply(this, args);
+ }, wait);
+ };
+}
diff --git a/src/utils/generateUuid.ts b/src/utils/generateUuid.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/utils/i18n.ts b/src/utils/i18n.ts
new file mode 100644
index 0000000000000000000000000000000000000000..17ed904ae2bc670e2d9b82c36cbe4e65fe6c3547
--- /dev/null
+++ b/src/utils/i18n.ts
@@ -0,0 +1,12 @@
+// translate router.meta.title, be used in breadcrumb sidebar tagsview
+import i18n from "@/lang/index";
+
+export function translateRouteTitle(title: any) {
+ // 判断是否存在国际化配置,如果没有原生返回
+ const hasKey = i18n.global.te("route." + title);
+ if (hasKey) {
+ const translatedTitle = i18n.global.t("route." + title);
+ return translatedTitle;
+ }
+ return title;
+}
diff --git a/src/utils/index.ts b/src/utils/index.ts
new file mode 100644
index 0000000000000000000000000000000000000000..44bb588bf795737098f944d3af07b14aa6913973
--- /dev/null
+++ b/src/utils/index.ts
@@ -0,0 +1,41 @@
+/**
+ * Check if an element has a class
+ * @param {HTMLElement} ele
+ * @param {string} cls
+ * @returns {boolean}
+ */
+export function hasClass(ele: HTMLElement, cls: string) {
+ return !!ele.className.match(new RegExp("(\\s|^)" + cls + "(\\s|$)"));
+}
+
+/**
+ * Add class to element
+ * @param {HTMLElement} ele
+ * @param {string} cls
+ */
+export function addClass(ele: HTMLElement, cls: string) {
+ if (!hasClass(ele, cls)) ele.className += " " + cls;
+}
+
+/**
+ * Remove class from element
+ * @param {HTMLElement} ele
+ * @param {string} cls
+ */
+export function removeClass(ele: HTMLElement, cls: string) {
+ if (hasClass(ele, cls)) {
+ const reg = new RegExp("(\\s|^)" + cls + "(\\s|$)");
+ ele.className = ele.className.replace(reg, " ");
+ }
+}
+
+/**
+ * 判断是否是外部链接
+ *
+ * @param {string} path
+ * @returns {Boolean}
+ */
+export function isExternal(path: string) {
+ const isExternal = /^(https?:|http?:|mailto:|tel:)/.test(path);
+ return isExternal;
+}
diff --git a/src/utils/nprogress.ts b/src/utils/nprogress.ts
new file mode 100644
index 0000000000000000000000000000000000000000..c1d5f2307fc796c47bcefa6c6499952c4ef614ef
--- /dev/null
+++ b/src/utils/nprogress.ts
@@ -0,0 +1,18 @@
+import NProgress from "nprogress";
+import "nprogress/nprogress.css";
+
+// 进度条
+NProgress.configure({
+ // 动画方式
+ easing: "ease",
+ // 递增进度条的速度
+ speed: 500,
+ // 是否显示加载ico
+ showSpinner: false,
+ // 自动递增间隔
+ trickleSpeed: 200,
+ // 初始化时的最小百分比
+ minimum: 0.3,
+});
+
+export default NProgress;
diff --git a/src/utils/request.ts b/src/utils/request.ts
new file mode 100644
index 0000000000000000000000000000000000000000..9051b10451d72bda46da00429b280a208bdd5ee6
--- /dev/null
+++ b/src/utils/request.ts
@@ -0,0 +1,108 @@
+import axios, { InternalAxiosRequestConfig, AxiosResponse } from "axios";
+import { useUserStoreHook } from "@/store/modules/user";
+import { ResultEnum } from "@/enums/ResultEnum";
+import { TOKEN_KEY } from "@/enums/CacheEnum";
+import qs from "qs";
+import i18n from "@/lang/index";
+import { IconError } from "@computing/opendesign-icons";
+
+// 创建 axios 实例
+const service = axios.create({
+ baseURL: "/api",
+ timeout: 90000,
+ withCredentials: true,
+ headers: {
+ "Access-control-allow-origin": "*",
+ },
+ paramsSerializer: (params) => {
+ return qs.stringify(params);
+ },
+});
+
+// 请求拦截器
+service.interceptors.request.use(
+ (config: InternalAxiosRequestConfig) => {
+ const accessToken = localStorage.getItem(TOKEN_KEY);
+ if (accessToken) {
+ config.headers.Authorization = accessToken;
+ }
+ return config;
+ },
+ (error: any) => {
+ return Promise.reject(error);
+ }
+);
+
+// 响应拦截器
+service.interceptors.response.use(
+ (response: AxiosResponse) => {
+ // 检查配置的响应类型是否为二进制类型('blob' 或 'arraybuffer'), 如果是,直接返回响应对象
+ if (
+ response.config.responseType === "blob" ||
+ response.config.responseType === "arraybuffer"
+ ) {
+ return response;
+ }
+
+ const { retcode, data, retmsg } = response?.data;
+ if (retcode?.toString() === ResultEnum.SUCCESS) {
+ return data;
+ }
+ ElMessage({
+ showClose: true,
+ message: retmsg || i18n.global.t("pageTipText.systemError"),
+ icon: IconError,
+ customClass: "o-message--error",
+ duration: 3000,
+ });
+ return Promise.reject(new Error(retmsg || "Error"));
+ },
+ (error: any) => {
+ // 异常处理
+ if (error?.response?.data) {
+ const { retcode, retmsg } = error.response.data;
+ if (retcode?.toString() === ResultEnum.TOKEN_INVALID) {
+ if (error?.config?.url === "/user/login") {
+ ElMessage({
+ showClose: true,
+ message: i18n.global.t("login.message.loginTip"),
+ icon: IconError,
+ customClass: "o-message--error",
+ duration: 3000,
+ });
+ } else {
+ ElNotification({
+ title: i18n.global.t("dialogTipText.tipsText"),
+ message: i18n.global.t("login.message.loginToken"),
+ type: "info",
+ });
+ useUserStoreHook()
+ .resetToken()
+ .then(() => {
+ location.reload();
+ });
+ }
+ } else {
+ ElMessage({
+ showClose: true,
+ message: retmsg || error?.message,
+ icon: IconError,
+ customClass: "o-message--error",
+ duration: 3000,
+ });
+ }
+ } else {
+ ElMessage({
+ showClose: true,
+ message: error?.message,
+ icon: IconError,
+ customClass: "o-message--error",
+ duration: 3000,
+ });
+ }
+ return Promise.reject(error.message);
+ }
+);
+
+// 导出 axios 实例
+export default service;
diff --git a/src/views/knowledgeFile/fileConfig.ts b/src/views/knowledgeFile/fileConfig.ts
new file mode 100644
index 0000000000000000000000000000000000000000..a5307776158fc0428a8157d2ad5b40cd52ec6306
--- /dev/null
+++ b/src/views/knowledgeFile/fileConfig.ts
@@ -0,0 +1,25 @@
+export interface searchPaylodInterface {
+ name?: string;
+ document_type_list?: string[];
+ chunk_size_order?: string;
+ created_time_order?: string;
+ parse_status?: string[];
+ created_time_start?: string;
+ created_time_end?: string;
+ enabled?: string;
+ [property: string]: any;
+}
+
+export interface FileForm {
+ chunk_size: number;
+ type_id: string;
+ id: string;
+ name: string;
+ [property: string]: any;
+}
+
+export interface DocumentType {
+ id: string;
+ type: string;
+ [property: string]: any;
+}
diff --git a/src/views/knowledgeFile/index.vue b/src/views/knowledgeFile/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..53e35364645fec4905f2564f6b931b107a06ad0c
--- /dev/null
+++ b/src/views/knowledgeFile/index.vue
@@ -0,0 +1,1491 @@
+
+
+
+
+
+
+
+ {{
+ menuType === MenuType.KL_FILE
+ ? $t("btnText.assetDocList")
+ : $t("btnText.configInfo")
+ }}
+
+
+
+
+
+ {{ $t("btnText.assetDocList") }}
+
+
+ {{ $t("btnText.configInfo") }}
+
+
+
+
+
+ {{ $t("btnText.importFile") }}
+
+
+
+ {{ $t("btnText.batchDown") }}
+
+
+
+
+
+
+
+
+
+
+ {{ $t("btnText.downloadAll") }}
+
+
+ {{ $t("btnText.downloadChoose") }}
+
+
+
+
+
+ {{ $t("btnText.analytic") }}
+
+
+ {{ $t("btnText.delete") }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.name }}
+
+
+
+
+
+
+
+
+ {{ scope.row.document_type.type }}
+
+
+
+
+
+
+
+
+ {{ convertUTCToLocalTime(scope.row.created_time) }}
+
+
+
+
+
+
+
+
+ {{ $t("assetFile.status.analyticFail") }}
+
+
+ {{ $t("assetFile.status.analyticSucces") }}
+
+
+ {{ $t("assetFile.status.cancelAnalytic") }}
+
+
+
+ {{ $t("assetFile.status.analyticWaitIng") }}
+
+
+
+
+
+
+ {{ $t("assetFile.status.analyticIng") }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{
+ scope?.row?.task?.status === "success" &&
+ scope?.row?.task?.reports?.[0]?.create_time
+ ? convertUTCToLocalTime(
+ scope?.row?.task?.reports?.[0]?.create_time
+ )
+ : "--"
+ }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t("btnText.cancel") }}
+
+
+ {{ $t("btnText.analytic") }}
+
+
+ {{ $t("btnText.edit") }}
+
+
+ {{ $t("btnText.download") }}
+
+
+ {{ $t("btnText.delete") }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t("dialogTipText.confirmCancelAnalytic") }}
+
+
+
+ {{ $t("btnText.confirm") }}
+
+
+ {{ $t("btnText.cancel") }}
+
+
+
+
+
+
+
+ {{ $t("dialogTipText.confirmDelFile") }}
+
+ 【
+
+
+
+ 】
+ {{ userLanguage === "zh" ? "吗?" : null }}
+
+
+
+
+
+ {{ $t("btnText.confirm") }}
+
+
+ {{ $t("btnText.cancel") }}
+
+
+
+
+
+
+
+ {{ $t("dialogTipText.confirmDelSelected") }}
+
+
+
+
+ {{ $t("btnText.confirm") }}
+
+
+ {{ $t("btnText.cancel") }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ (512~1024)
+
+
+ {{ $t("assetFile.analyticTip") }}
+
+
+
+
+ {{ $t("btnText.confirm") }}
+
+
+ {{ $t("btnText.cancel") }}
+
+
+
+
+
+
+
diff --git a/src/views/knowledgeFileSection/index.vue b/src/views/knowledgeFileSection/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..e566c5e9f1e59f65c0e112793a8189891400c627
--- /dev/null
+++ b/src/views/knowledgeFileSection/index.vue
@@ -0,0 +1,574 @@
+
+
+
+
+
+
+
+
+
+
+
{{ $t("assetFile.baseInfo") }}
+
+
{{ $t("assetFile.docName") }}
+
+
+
+
+
+
+ {{ $t("assetFile.category") }}
+
+
+
+
+
+
+
+ {{ $t("assetLibrary.analyticMethod") }}
+
+
+ {{ fileInfo?.parser_method }}
+
+
+
+
+ {{ $t("assetFile.uploadTime") }}
+
+
+ {{
+ fileInfo?.created_time
+ ? convertUTCToLocalTime(fileInfo?.created_time)
+ : "--"
+ }}
+
+
+
+
+ {{ $t("assetFile.chunkSize") }}
+
+
{{ fileInfo?.chunk_size }}
+
+
+
+
+
{{ $t("assetFile.contentView") }}
+
+
+
+
+
+
+ {{ $t("btnText.all") }}
+
+
+
+ {{ textType[item] }}
+
+
+
+
+
+
+
+
+ {{ $t("btnText.all") }}
+
+
+ {{
+ `${textType[item]}${fileType.length > 1 && index === 0 ? "," : ""}`
+ }}
+
+
+
+ {{ $t("assetLibrary.message.pleaseChoose") }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t("btnText.batch") }}
+
+
+
+
+
+
+
+
+
+
+ {{ $t("btnText.enable") }}
+
+
+ {{ $t("btnText.close") }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ textType[scope.row.type] }}
+
+
+
+ {{ itemText }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/knowledgeLibrary/index.vue b/src/views/knowledgeLibrary/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..b2fa7804326c67e2dcb7bc6c48d3c8478ee73289
--- /dev/null
+++ b/src/views/knowledgeLibrary/index.vue
@@ -0,0 +1,1267 @@
+
+
+
+
+
+
+
+
+ {{ $t("assetLibrary.exportTaskList") }}
+ {{ `(${exportTaskTotal})` }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ _
+ {{ $t("exportTask.export") }}
+
+
+
+
+
+
+
+
+
+
+ {{ $t("exportTask.pendingExport") }}
+
+
+
+
+
+
+
+
+ {{ $t("exportTask.exportSuccess") }}
+
+
+ {{ $t("exportTask.exportFailed") }}
+
+
+ {{ $t("exportTask.canceled") }}
+
+
+
+
+
{{ $t("exportTask.reason") }}
+
+ {{ $t("btnText.retry") }}
+
+
+
+
+ {{ $t("exportTask.downloadTask") }}
+
+
+
+
+
+
+
+ {{ $t("btnText.clearAll") }}
+
+
+
+
+
+
+ {{ $t("assetLibrary.assetLibrary") }}
+
+
+
+
+ {{ $t("btnText.createAssetLibrary") }}
+
+
+ {{ $t("btnText.batchImport") }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t("btnText.edit") }}
+
+
+ {{ $t("btnText.export") }}
+
+
+ {{ $t("btnText.delete") }}
+
+
+
+
+
+
+
+
+
+
+ {{ `ID:${" "} ` }}
+ {{ item.id }}
+
+
+
+
+ {{ $t("pageTipText.NoData") }}
+
+
+
+
+
+
+
+ {{ scope.row.name }}
+
+
+
+
+
+
+
+
+
+ {{ scope.row.id }}
+
+
+
+
+
+
+ {}"
+ @click.stop
+ >
+
+
+
+
+ {{ convertUTCToLocalTime(scope.row.created_time) }}
+
+
+
+
+
+ {{ $t("btnText.edit") }}
+
+
+ {{ $t("btnText.export") }}
+
+
+ {{ $t("btnText.delete") }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t("dialogTipText.isAddFilr") }}
+
+
+ {{ $t("btnText.confirm") }}
+
+
+ {{ $t("btnText.cancel") }}
+
+
+
+
+
+
+
+ {{ $t("dialogTipText.confirmDelAsset") }}
+
+ 【
+
+
+
+ 】
+ {{ userLanguage === "zh" ? "吗?" : null }}
+
+
+
+
+
+ {{ $t("btnText.confirm") }}
+
+
+ {{ $t("btnText.cancel") }}
+
+
+
+
+
+
+
diff --git a/src/views/login/index.vue b/src/views/login/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..ddaf66ad779333112a28eebe8afed799067b1cc1
--- /dev/null
+++ b/src/views/login/index.vue
@@ -0,0 +1,164 @@
+
+
+
+
+
+
+
+
+ {{ $t("login.welcomeToUse") }}
+
+
{{ defaultSettings.title }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t("login.login") }}
+
+
+
+
+ {{ $t("copyright") }}
+
+
+
+
+
+
+
+
+
diff --git a/src/views/notFoundPage/index.vue b/src/views/notFoundPage/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..b736d36e4ca7c85168471e2a7e5ee1389b4bf4cf
--- /dev/null
+++ b/src/views/notFoundPage/index.vue
@@ -0,0 +1,9 @@
+
+
+
+
+
+
diff --git a/tsconfig.json b/tsconfig.json
new file mode 100644
index 0000000000000000000000000000000000000000..441cb93194a6770ac8c8ff3cb48eb52ce10b9a23
--- /dev/null
+++ b/tsconfig.json
@@ -0,0 +1,28 @@
+{
+ "compilerOptions": {
+ "target": "esnext",
+ "useDefineForClassFields": true,
+ "module": "esnext",
+ "moduleResolution": "node",
+ "strict": true,
+ "noLib": false,
+ "sourceMap": true,
+ "resolveJsonModule": true,
+ "esModuleInterop": true,
+ "lib": ["esnext", "dom"],
+ "baseUrl": ".",
+ "allowJs": true,
+ "skipLibCheck": true,
+ "allowSyntheticDefaultImports": true,
+ "forceConsistentCasingInFileNames": true,
+ "jsx": "preserve",
+ "jsxFactory": "h",
+ "jsxFragmentFactory": "Fragment",
+ "paths": {
+ "@/*": ["src/*"]
+ },
+ "types": ["vite/client", "unplugin-icons/types/vue", "element-plus/global"]
+ },
+ "include": ["mock/**/*.ts", "src/**/*.ts", "src/**/*.vue", "vite.config.ts"],
+ "exclude": ["node_modules", "dist", "**/*.js"]
+}
diff --git a/uno.config.ts b/uno.config.ts
new file mode 100644
index 0000000000000000000000000000000000000000..b952fe40b79dd4f5af0283fbc6590c4828d7ed0e
--- /dev/null
+++ b/uno.config.ts
@@ -0,0 +1,43 @@
+// uno.config.ts
+import {
+ defineConfig,
+ presetAttributify,
+ presetIcons,
+ presetTypography,
+ presetUno,
+ presetWebFonts,
+ transformerDirectives,
+ transformerVariantGroup,
+} from "unocss";
+
+export default defineConfig({
+ shortcuts: {
+ "flex-center": "flex justify-center items-center",
+ "flex-x-center": "flex justify-center",
+ "flex-y-center": "flex items-center",
+ "wh-full": "w-full h-full",
+ "flex-x-between": "flex items-center justify-between",
+ "flex-x-end": "flex items-center justify-end",
+ "absolute-lt": "absolute left-0 top-0",
+ "absolute-rt": "absolute right-0 top-0 ",
+ "fixed-lt": "fixed left-0 top-0",
+ },
+ theme: {
+ colors: {
+ primary: "var(--el-color-primary)",
+ primary_dark: "var(--el-color-primary-light-5)",
+ },
+ },
+ presets: [
+ presetUno(),
+ presetAttributify(),
+ presetIcons(),
+ presetTypography(),
+ presetWebFonts({
+ fonts: {
+ // ...
+ },
+ }),
+ ],
+ transformers: [transformerDirectives(), transformerVariantGroup()],
+});
diff --git a/vite.config.ts b/vite.config.ts
new file mode 100644
index 0000000000000000000000000000000000000000..6d38b1519f6bbc5342dc3e3585f608137fe29009
--- /dev/null
+++ b/vite.config.ts
@@ -0,0 +1,248 @@
+import vue from "@vitejs/plugin-vue";
+import vueJsx from "@vitejs/plugin-vue-jsx";
+import { UserConfig, ConfigEnv, loadEnv, defineConfig } from "vite";
+
+import AutoImport from "unplugin-auto-import/vite";
+import Components from "unplugin-vue-components/vite";
+import { ElementPlusResolver } from "unplugin-vue-components/resolvers";
+import Icons from "unplugin-icons/vite";
+import IconsResolver from "unplugin-icons/resolver";
+
+import { createSvgIconsPlugin } from "vite-plugin-svg-icons";
+import mockDevServerPlugin from "vite-plugin-mock-dev-server";
+
+import UnoCSS from "unocss/vite";
+import { resolve } from "path";
+import {
+ name,
+ version,
+ engines,
+ dependencies,
+ devDependencies,
+} from "./package.json";
+
+const __APP_INFO__ = {
+ pkg: { name, version, engines, dependencies, devDependencies },
+ buildTimestamp: Date.now(),
+};
+
+const pathSrc = resolve(__dirname, "src");
+export default defineConfig(({ mode }: ConfigEnv): UserConfig => {
+ const env = loadEnv(mode, process.cwd());
+ return {
+ resolve: {
+ alias: {
+ "@": pathSrc,
+ },
+ },
+ css: {
+ // CSS 预处理器
+ preprocessorOptions: {
+ // 定义全局 SCSS 变量
+ scss: {
+ javascriptEnabled: true,
+ additionalData: `
+ @use "@/styles/variables.scss" as *;
+ `,
+ },
+ },
+ },
+ server: {
+ // 允许IP访问
+ host: "127.0.0.1",
+ port: 3002,
+ // 运行是否自动打开浏览器
+ headers: {
+ "Access-control-allow-origin": "*",
+ },
+ open: true,
+ proxy: {
+ "/api": {
+ target: "http://116.63.144.61:9988",
+ changeOrigin: true,
+ ws: false,
+ rewrite: (path) => path.replace(new RegExp("^" + "/api"), ""),
+ },
+ },
+ },
+ plugins: [
+ vue(),
+ // jsx、tsx语法支持
+ vueJsx(),
+ // MOCK 服务
+ env.VITE_MOCK_DEV_SERVER === "true" ? mockDevServerPlugin() : null,
+ UnoCSS({
+ hmrTopLevelAwait: false,
+ }),
+ AutoImport({
+ // 自动导入 Vue 相关函数,如:ref, reactive, toRef 等
+ imports: ["vue", "@vueuse/core", "pinia", "vue-router", "vue-i18n"],
+ resolvers: [
+ // 自动导入 Element Plus 相关函数,如:ElMessage, ElMessageBox... (带样式)
+ ElementPlusResolver(),
+ // 自动导入图标组件
+ IconsResolver({}),
+ ],
+ eslintrc: {
+ // 是否自动生成 eslint 规则,建议生成之后设置 false
+ enabled: false,
+ // 指定自动导入函数 eslint 规则的文件
+ filepath: "./.eslintrc-auto-import.json",
+ globalsPropValue: true,
+ },
+ // 是否在 vue 模板中自动导入
+ vueTemplate: true,
+ // 指定自动导入函数TS类型声明文件路径 (false:关闭自动生成)
+ dts: false,
+ // dts: "src/types/auto-imports.d.ts",
+ }),
+ Components({
+ resolvers: [
+ // 自动导入 Element Plus 组件
+ ElementPlusResolver(),
+ // 自动注册图标组件
+ IconsResolver({
+ // element-plus图标库,其他图标库 https://icon-sets.iconify.design/
+ enabledCollections: ["ep"],
+ }),
+ ],
+ // 指定自定义组件位置(默认:src/components)
+ dirs: ["src/components", "src/**/components"],
+ // 指定自动导入组件TS类型声明文件路径 (false:关闭自动生成)
+ dts: false,
+ // dts: "src/types/components.d.ts",
+ }),
+ Icons({
+ // 自动安装图标库
+ autoInstall: true,
+ }),
+ createSvgIconsPlugin({
+ // 指定需要缓存的图标文件夹
+ iconDirs: [resolve(pathSrc, "assets/icons")],
+ // 指定symbolId格式
+ symbolId: "icon-[dir]-[name]",
+ }),
+ ],
+ // 预加载项目必需的组件
+ optimizeDeps: {
+ include: [
+ "vue",
+ "vue-router",
+ "pinia",
+ "axios",
+ "@vueuse/core",
+ "sortablejs",
+ "path-to-regexp",
+ "echarts",
+ "@wangeditor/editor",
+ "@wangeditor/editor-for-vue",
+ "vue-i18n",
+ "path-browserify",
+ "element-plus/es/components/form/style/css",
+ "element-plus/es/components/form-item/style/css",
+ "element-plus/es/components/button/style/css",
+ "element-plus/es/components/input/style/css",
+ "element-plus/es/components/input-number/style/css",
+ "element-plus/es/components/switch/style/css",
+ "element-plus/es/components/upload/style/css",
+ "element-plus/es/components/menu/style/css",
+ "element-plus/es/components/col/style/css",
+ "element-plus/es/components/icon/style/css",
+ "element-plus/es/components/row/style/css",
+ "element-plus/es/components/tag/style/css",
+ "element-plus/es/components/dialog/style/css",
+ "element-plus/es/components/loading/style/css",
+ "element-plus/es/components/radio/style/css",
+ "element-plus/es/components/radio-group/style/css",
+ "element-plus/es/components/popover/style/css",
+ "element-plus/es/components/scrollbar/style/css",
+ "element-plus/es/components/tooltip/style/css",
+ "element-plus/es/components/dropdown/style/css",
+ "element-plus/es/components/dropdown-menu/style/css",
+ "element-plus/es/components/dropdown-item/style/css",
+ "element-plus/es/components/sub-menu/style/css",
+ "element-plus/es/components/menu-item/style/css",
+ "element-plus/es/components/divider/style/css",
+ "element-plus/es/components/card/style/css",
+ "element-plus/es/components/link/style/css",
+ "element-plus/es/components/breadcrumb/style/css",
+ "element-plus/es/components/breadcrumb-item/style/css",
+ "element-plus/es/components/table/style/css",
+ "element-plus/es/components/tree-select/style/css",
+ "element-plus/es/components/table-column/style/css",
+ "element-plus/es/components/select/style/css",
+ "element-plus/es/components/option/style/css",
+ "element-plus/es/components/pagination/style/css",
+ "element-plus/es/components/tree/style/css",
+ "element-plus/es/components/alert/style/css",
+ "element-plus/es/components/radio-button/style/css",
+ "element-plus/es/components/checkbox-group/style/css",
+ "element-plus/es/components/checkbox/style/css",
+ "element-plus/es/components/tabs/style/css",
+ "element-plus/es/components/tab-pane/style/css",
+ "element-plus/es/components/rate/style/css",
+ "element-plus/es/components/date-picker/style/css",
+ "element-plus/es/components/notification/style/css",
+ "element-plus/es/components/image/style/css",
+ "element-plus/es/components/statistic/style/css",
+ "element-plus/es/components/watermark/style/css",
+ "element-plus/es/components/config-provider/style/css",
+ "element-plus/es/components/text/style/css",
+ "element-plus/es/components/drawer/style/css",
+ "element-plus/es/components/color-picker/style/css",
+ "element-plus/es/components/backtop/style/css",
+ "element-plus/es/components/message-box/style/css",
+ "element-plus/es/components/skeleton/style/css",
+ "element-plus/es/components/skeleton/style/css",
+ "element-plus/es/components/skeleton-item/style/css",
+ "element-plus/es/components/badge/style/css",
+ "element-plus/es/components/steps/style/css",
+ "element-plus/es/components/step/style/css",
+ "element-plus/es/components/avatar/style/css",
+ "element-plus/es/components/descriptions/style/css",
+ "element-plus/es/components/descriptions-item/style/css",
+ ],
+ },
+ // 构建配置
+ build: {
+ chunkSizeWarningLimit: 2000, // 消除打包大小超过500kb警告
+ minify: "terser", // Vite 2.6.x 以上需要配置 minify: "terser", terserOptions 才能生效
+ terserOptions: {
+ compress: {
+ keep_infinity: true, // 防止 Infinity 被压缩成 1/0,这可能会导致 Chrome 上的性能问题
+ drop_console: true, // 生产环境去除 console
+ drop_debugger: true, // 生产环境去除 debugger
+ },
+ format: {
+ comments: false, // 删除注释
+ },
+ },
+ rollupOptions: {
+ output: {
+ // 用于从入口点创建的块的打包输出格式[name]表示文件名,[hash]表示该文件内容hash值
+ entryFileNames: "js/[name].[hash].js",
+ // 用于命名代码拆分时创建的共享块的输出命名
+ chunkFileNames: "js/[name].[hash].js",
+ // 用于输出静态资源的命名,[ext]表示文件扩展名
+ assetFileNames: (assetInfo: any) => {
+ const info = assetInfo.name.split(".");
+ let extType = info[info.length - 1];
+ if (
+ /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/i.test(assetInfo.name)
+ ) {
+ extType = "media";
+ } else if (/\.(png|jpe?g|gif|svg)(\?.*)?$/.test(assetInfo.name)) {
+ extType = "img";
+ } else if (/\.(woff2?|eot|ttf|otf)(\?.*)?$/i.test(assetInfo.name)) {
+ extType = "fonts";
+ }
+ return `${extType}/[name].[hash].[ext]`;
+ },
+ },
+ },
+ },
+ define: {
+ __APP_INFO__: JSON.stringify(__APP_INFO__),
+ },
+ };
+});