diff --git a/backend/competition-management-service-test-1.0.0.tgz b/backend/competition-management-service-test-1.0.0.tgz new file mode 100644 index 0000000..9fa0db3 Binary files /dev/null and b/backend/competition-management-service-test-1.0.0.tgz differ diff --git a/backend/ecosystem.config.js b/backend/ecosystem.config.js new file mode 100644 index 0000000..f636a63 --- /dev/null +++ b/backend/ecosystem.config.js @@ -0,0 +1,123 @@ +/** + * PM2 进程管理器配置文件 + * + * 环境区分说明: + * 1. 通过 --env 参数指定环境:pm2 start ecosystem.config.js --env <环境名> + * 2. 环境配置会自动合并:基础配置(env) + 环境特定配置(env_<环境名>) + * 3. 测试环境: --env test (端口 3001, 2个实例) + * 4. 生产环境: --env production (端口 3000, 最大实例数) + */ + +const baseAppConfig = { + script: './dist/src/main.js', + + // 日志文件路径 + error_file: './logs/pm2-error.log', + out_file: './logs/pm2-out.log', + log_file: './logs/pm2-combined.log', + + // 日志日期格式 + log_date_format: 'YYYY-MM-DD HH:mm:ss Z', + + // 合并日志(所有实例的日志合并到一个文件) + merge_logs: true, + + // 自动重启配置 + autorestart: true, + + // 监听文件变化(生产环境建议关闭) + watch: false, + + // 忽略监听的文件/目录 + ignore_watch: ['node_modules', 'logs', 'dist', '.git', '*.log'], + + // 最大内存限制(超过后自动重启) + max_memory_restart: '1G', + + // 最小正常运行时间(秒),小于此时间重启不计入重启次数 + min_uptime: '10s', + + // 最大重启次数(在 min_uptime 时间内) + max_restarts: 10, + + // 重启延迟(毫秒) + restart_delay: 4000, + + // 等待就绪信号的时间(毫秒) + wait_ready: true, + listen_timeout: 10000, + + // 优雅关闭超时时间(毫秒) + kill_timeout: 5000, + + // 应用启动后的等待时间(毫秒) + shutdown_with_message: true, + + // 源代码映射支持 + source_map_support: true, + + // 实例间负载均衡策略 + instance_var: 'INSTANCE_ID', +}; + +module.exports = { + apps: [ + { + ...baseAppConfig, + + // 生产环境应用 + name: 'competition-api', + instances: 2, + exec_mode: 'cluster', + + env_file: '.env.production', + env: { + NODE_ENV: 'production', + PORT: 3234, + }, + }, + { + ...baseAppConfig, + + // 测试环境应用 + name: 'competition-api-test', + instances: 2, + exec_mode: 'cluster', + + env_file: '.env.test', + env: { + NODE_ENV: 'test', + PORT: 3234, + }, + }, + ], + + // ============================================ + // 部署配置(用于 PM2 自动化部署) + // 使用方式: pm2 deploy ecosystem.config.js <环境名> + // ============================================ + deploy: { + // 测试环境部署配置 + test: { + user: 'deploy', + host: ['119.29.229.174'], + ref: 'origin/develop', + repo: 'git@github.com:your-username/competition-management-system.git', + path: '/var/www/competition-management-test', + 'post-deploy': + 'cd backend && pnpm install && pnpm run build && pm2 reload ecosystem.config.js --only competition-api-test', + 'pre-setup': 'apt-get update && apt-get install -y git', + }, + // 生产环境部署配置 + production: { + user: 'deploy', + host: ['your-prod-server-ip'], + ref: 'origin/master', + repo: 'git@github.com:your-username/competition-management-system.git', + path: '/var/www/competition-management', + 'post-deploy': + 'cd backend && pnpm install && pnpm run build && pm2 reload ecosystem.config.js --only competition-api', + 'pre-setup': 'apt-get update && apt-get install -y git', + }, + }, +}; diff --git a/backend/package-lock.json b/backend/package-lock.json index a4a6932..dffc0e5 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -16,9 +16,9 @@ "@nestjs/mapped-types": "^2.1.0", "@nestjs/passport": "^10.0.3", "@nestjs/platform-express": "^10.3.3", - "@nestjs/serve-static": "^4.0.0", "@prisma/client": "^6.19.0", "adm-zip": "^0.5.16", + "axios": "^1.6.7", "bcrypt": "^6.0.0", "class-transformer": "^0.5.1", "class-validator": "^0.14.1", @@ -28,12 +28,13 @@ "passport-local": "^1.0.0", "reflect-metadata": "^0.2.1", "rxjs": "^7.8.1", - "uuid": "^13.0.0" + "uuid": "^8.3.2" }, "devDependencies": { "@nestjs/cli": "^10.3.2", "@nestjs/schematics": "^10.1.0", "@nestjs/testing": "^10.3.3", + "@types/adm-zip": "^0.5.5", "@types/bcrypt": "^5.0.2", "@types/express": "^4.17.21", "@types/jest": "^29.5.11", @@ -1915,39 +1916,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@nestjs/serve-static": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@nestjs/serve-static/-/serve-static-4.0.2.tgz", - "integrity": "sha512-cT0vdWN5ar7jDI2NKbhf4LcwJzU4vS5sVpMkVrHuyLcltbrz6JdGi1TfIMMatP2pNiq5Ie/uUdPSFDVaZX/URQ==", - "license": "MIT", - "dependencies": { - "path-to-regexp": "0.2.5" - }, - "peerDependencies": { - "@fastify/static": "^6.5.0 || ^7.0.0", - "@nestjs/common": "^9.0.0 || ^10.0.0", - "@nestjs/core": "^9.0.0 || ^10.0.0", - "express": "^4.18.1", - "fastify": "^4.7.0" - }, - "peerDependenciesMeta": { - "@fastify/static": { - "optional": true - }, - "express": { - "optional": true - }, - "fastify": { - "optional": true - } - } - }, - "node_modules/@nestjs/serve-static/node_modules/path-to-regexp": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.2.5.tgz", - "integrity": "sha512-l6qtdDPIkmAmzEO6egquYDfqQGPMRNGjYtrU13HAXb3YSRrt7HSb1sJY0pKp6o2bAa86tSB6iwaW2JbthPKr7Q==", - "license": "MIT" - }, "node_modules/@nestjs/testing": { "version": "10.4.20", "resolved": "https://registry.npmjs.org/@nestjs/testing/-/testing-10.4.20.tgz", @@ -2227,6 +2195,16 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/adm-zip": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@types/adm-zip/-/adm-zip-0.5.7.tgz", + "integrity": "sha512-DNEs/QvmyRLurdQPChqq0Md4zGvPwHerAJYWk9l2jCbD1VPpnzRJorOdiq4zsw09NFbYnhfsoEhWtxIzXpn2yw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/babel__core": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", @@ -3262,6 +3240,33 @@ "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==", "license": "MIT" }, + "node_modules/axios": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz", + "integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.4", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/axios/node_modules/form-data": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/babel-jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", @@ -4861,6 +4866,21 @@ "node": ">= 0.4" } }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/escalade": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", @@ -5602,6 +5622,26 @@ "dev": true, "license": "ISC" }, + "node_modules/follow-redirects": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, "node_modules/foreground-child": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", @@ -6124,6 +6164,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", @@ -8757,6 +8812,12 @@ "node": ">= 0.10" } }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, "node_modules/psl": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", @@ -10517,16 +10578,12 @@ } }, "node_modules/uuid": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-13.0.0.tgz", - "integrity": "sha512-XQegIaBTVUjSHliKqcnFqYypAd4S+WCYt5NIeRs6w/UAry7z8Y9j5ZwRRL4kzq9U3sD6v+85er9FvkEaBpji2w==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "license": "MIT", "bin": { - "uuid": "dist-node/bin/uuid" + "uuid": "dist/bin/uuid" } }, "node_modules/v8-compile-cache-lib": { diff --git a/backend/package.json b/backend/package.json index 5312074..915c908 100644 --- a/backend/package.json +++ b/backend/package.json @@ -12,6 +12,10 @@ "start:dev": "set NODE_ENV=development&&nest start --watch", "start:debug": "NODE_ENV=development nest start --debug --watch", "start:prod": "NODE_ENV=production node dist/main", + "start:pm2:test": "pm2 start ecosystem.config.js --env test --only competition-api-test", + "start:pm2:prod": "pm2 start ecosystem.config.js --env production --only competition-api", + "stop:pm2:test": "pm2 stop competition-api-test", + "stop:pm2:prod": "pm2 stop competition-api", "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix", "test": "NODE_ENV=test jest", "test:watch": "NODE_ENV=test jest --watch", @@ -42,7 +46,9 @@ "init:roles:super": "ts-node scripts/init-roles-permissions.ts --super", "init:roles": "ts-node scripts/init-roles-permissions.ts", "init:roles:all": "ts-node scripts/init-roles-permissions.ts --all", - "init:tenant": "ts-node scripts/init-tenant.ts" + "init:tenant": "ts-node scripts/init-tenant.ts", + "compress:tgz:prod:win": "node -p \"require('./package.json').version\" | xargs -I {} bash scripts/compress.sh --env production --version {}", + "compress:tgz:test:win": "node -p \"require('./package.json').version\" | xargs -I {} bash scripts/compress.sh --env test --version {}" }, "dependencies": { "@nestjs/common": "^10.3.3", @@ -52,7 +58,6 @@ "@nestjs/mapped-types": "^2.1.0", "@nestjs/passport": "^10.0.3", "@nestjs/platform-express": "^10.3.3", - "@nestjs/serve-static": "^4.0.0", "@prisma/client": "^6.19.0", "adm-zip": "^0.5.16", "axios": "^1.6.7", @@ -65,19 +70,19 @@ "passport-local": "^1.0.0", "reflect-metadata": "^0.2.1", "rxjs": "^7.8.1", - "uuid": "^13.0.0" + "uuid": "^8.3.2" }, "devDependencies": { "@nestjs/cli": "^10.3.2", "@nestjs/schematics": "^10.1.0", "@nestjs/testing": "^10.3.3", + "@types/adm-zip": "^0.5.5", "@types/bcrypt": "^5.0.2", "@types/express": "^4.17.21", "@types/jest": "^29.5.11", "@types/node": "^20.11.5", "@types/passport-jwt": "^4.0.1", "@types/passport-local": "^1.0.36", - "@types/adm-zip": "^0.5.5", "@types/uuid": "^10.0.0", "@typescript-eslint/eslint-plugin": "^6.19.1", "@typescript-eslint/parser": "^6.19.1", diff --git a/backend/scripts/compress.sh b/backend/scripts/compress.sh new file mode 100644 index 0000000..38e25e7 --- /dev/null +++ b/backend/scripts/compress.sh @@ -0,0 +1,219 @@ +#!/bin/bash + +# 压缩脚本 +# 使用方法: +# ./scripts/compress.sh # 使用默认配置(不包含 node_modules) +# ./scripts/compress.sh --include-node-modules # 使用默认配置(包含 node_modules) +# ./scripts/compress.sh -n # 使用默认配置(包含 node_modules,简写) +# ./scripts/compress.sh --env production --version 1.0.0 # 指定环境和版本 +# ./scripts/compress.sh --env test --version 1.0.0 -n # 组合使用多个参数 +# ./scripts/compress.sh src/ package.json # 自定义文件/文件夹列表 + +set -e + +# 颜色输出 +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' # No Color + +# 默认值 +ENV="" +VERSION="" +INCLUDE_NODE_MODULES=false + +# 解析命令行参数 +CUSTOM_ITEMS=() +while [[ $# -gt 0 ]]; do + case $1 in + --include-node-modules|-n) + INCLUDE_NODE_MODULES=true + shift + ;; + --env) + if [ -z "$2" ]; then + echo -e "${RED}错误: --env 参数需要一个值${NC}" + exit 1 + fi + ENV="$2" + shift 2 + ;; + --version) + if [ -z "$2" ]; then + echo -e "${RED}错误: --version 参数需要一个值${NC}" + exit 1 + fi + VERSION="$2" + shift 2 + ;; + *) + CUSTOM_ITEMS+=("$1") + shift + ;; + esac +done + +# 构建输出文件名 +OUTPUT_FILE="competition-management-service" +if [ -n "$ENV" ]; then + OUTPUT_FILE="${OUTPUT_FILE}-${ENV}" +fi +if [ -n "$VERSION" ]; then + OUTPUT_FILE="${OUTPUT_FILE}-${VERSION}" +fi +OUTPUT_FILE="${OUTPUT_FILE}.tgz" + +# 默认要压缩的文件和文件夹(如果用户没有指定) +DEFAULT_ITEMS=( + "dist" + "package.json" + "tsconfig.json" + "ecosystem.config.js" + "prisma/" + ".env" + ".env.development" + ".env.production" + ".env.test" +) + +# 如果指定了包含 node_modules,则添加到默认列表的开头 +if [ "$INCLUDE_NODE_MODULES" = true ]; then + DEFAULT_ITEMS=("node_modules" "${DEFAULT_ITEMS[@]}") +fi + +# 排除的文件和文件夹模式 +EXCLUDE_PATTERNS=( + "docs/" + "scripts/" + "sql/" + ".git" + ".DS_Store" + "*.log" + "./logs" + "coverage" + "*.tmp" + "*.temp" + ".cache" + ".pnpm-store" +) + +# 获取脚本所在目录 +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" + +# 切换到项目根目录 +cd "$PROJECT_ROOT" + +echo -e "${GREEN}📦 开始压缩项目...${NC}" +if [ -n "$ENV" ]; then + echo -e "${BLUE}环境: ${ENV}${NC}" +fi +if [ -n "$VERSION" ]; then + echo -e "${BLUE}版本: ${VERSION}${NC}" +fi +echo "" + +# 确定要压缩的文件和文件夹 +if [ ${#CUSTOM_ITEMS[@]} -eq 0 ]; then + if [ "$INCLUDE_NODE_MODULES" = true ]; then + echo -e "${YELLOW}未指定文件/文件夹,使用默认配置(包含 node_modules)${NC}" + else + echo -e "${YELLOW}未指定文件/文件夹,使用默认配置(不包含 node_modules)${NC}" + fi + ITEMS_TO_COMPRESS=("${DEFAULT_ITEMS[@]}") +else + echo -e "${YELLOW}使用自定义文件/文件夹列表${NC}" + ITEMS_TO_COMPRESS=("${CUSTOM_ITEMS[@]}") +fi + +# 验证文件和文件夹是否存在 +echo -e "${BLUE}检查文件/文件夹是否存在...${NC}" +MISSING_ITEMS=() +for item in "${ITEMS_TO_COMPRESS[@]}"; do + if [ ! -e "$item" ]; then + MISSING_ITEMS+=("$item") + echo -e "${RED} ⚠️ 警告: $item 不存在,将被跳过${NC}" + else + echo -e "${GREEN} ✅ $item${NC}" + fi +done + +# 如果有缺失的文件,询问是否继续 +if [ ${#MISSING_ITEMS[@]} -gt 0 ]; then + echo "" + echo -e "${YELLOW}发现 ${#MISSING_ITEMS[@]} 个不存在的文件/文件夹${NC}" + read -p "是否继续压缩? (y/n) " -n 1 -r + echo "" + if [[ ! $REPLY =~ ^[Yy]$ ]]; then + echo -e "${RED}已取消压缩${NC}" + exit 1 + fi +fi + +# 构建 tar 排除选项 +EXCLUDE_ARGS=() +for pattern in "${EXCLUDE_PATTERNS[@]}"; do + EXCLUDE_ARGS+=(--exclude="$pattern") +done + +# 如果输出文件已存在,询问是否覆盖 +if [ -f "$OUTPUT_FILE" ]; then + echo "" + echo -e "${YELLOW}输出文件 $OUTPUT_FILE 已存在${NC}" + read -p "是否覆盖? (y/n) " -n 1 -r + echo "" + if [[ ! $REPLY =~ ^[Yy]$ ]]; then + echo -e "${RED}已取消压缩${NC}" + exit 1 + fi + rm -f "$OUTPUT_FILE" +fi + +# 执行压缩 +echo "" +echo -e "${BLUE}正在压缩...${NC}" + +# 使用 tar 压缩 +tar -czf "$OUTPUT_FILE" \ + "${EXCLUDE_ARGS[@]}" \ + "${ITEMS_TO_COMPRESS[@]}" 2>/dev/null || { + echo -e "${RED}压缩失败${NC}" + exit 1 +} + +# 检查压缩结果 +if [ ! -f "$OUTPUT_FILE" ]; then + echo -e "${RED}错误: 压缩文件未生成${NC}" + exit 1 +fi + +# 显示压缩文件信息 +FILE_SIZE=$(du -h "$OUTPUT_FILE" | cut -f1) +echo "" +echo -e "${GREEN}═══════════════════════════════════════${NC}" +echo -e "${GREEN}✅ 压缩完成!${NC}" +echo -e "${GREEN}═══════════════════════════════════════${NC}" +echo "" +echo "📦 输出文件: $OUTPUT_FILE" +echo "📊 文件大小: $FILE_SIZE" +echo "📍 位置: $(pwd)/$OUTPUT_FILE" +if [ -n "$ENV" ]; then + echo "🌍 环境: $ENV" +fi +if [ -n "$VERSION" ]; then + echo "🏷️ 版本: $VERSION" +fi +echo "" +echo "📝 已压缩的内容:" +for item in "${ITEMS_TO_COMPRESS[@]}"; do + if [ -e "$item" ]; then + echo " ✅ $item" + fi +done +echo "" +echo "🚫 已排除的内容:" +for pattern in "${EXCLUDE_PATTERNS[@]}"; do + echo " ❌ $pattern" +done +echo "" diff --git a/backend/sql/init_data.sql b/backend/sql/init_data.sql new file mode 100644 index 0000000..428789b --- /dev/null +++ b/backend/sql/init_data.sql @@ -0,0 +1,1573 @@ +-- MySQL dump 10.13 Distrib 8.0.44, for Win64 (x86_64) +-- +-- Host: localhost Database: db_competition_management +-- ------------------------------------------------------ +-- Server version 8.0.44 + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!50503 SET NAMES utf8mb4 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +-- +-- Table structure for table `classes` +-- +USE db_competition_management; + +DROP TABLE IF EXISTS `classes`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `classes` ( + `id` int NOT NULL AUTO_INCREMENT, + `tenant_id` int NOT NULL, + `grade_id` int NOT NULL, + `name` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, + `code` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, + `type` int NOT NULL DEFAULT '1', + `capacity` int DEFAULT NULL, + `description` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `valid_state` int NOT NULL DEFAULT '1', + `creator` int DEFAULT NULL, + `modifier` int DEFAULT NULL, + `create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `modify_time` datetime(3) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `classes_tenant_id_code_key` (`tenant_id`,`code`), + KEY `classes_grade_id_fkey` (`grade_id`), + KEY `classes_creator_fkey` (`creator`), + KEY `classes_modifier_fkey` (`modifier`), + CONSTRAINT `classes_creator_fkey` FOREIGN KEY (`creator`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `classes_grade_id_fkey` FOREIGN KEY (`grade_id`) REFERENCES `grades` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `classes_modifier_fkey` FOREIGN KEY (`modifier`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `classes_tenant_id_fkey` FOREIGN KEY (`tenant_id`) REFERENCES `tenants` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `classes` +-- + +LOCK TABLES `classes` WRITE; +/*!40000 ALTER TABLE `classes` DISABLE KEYS */; +/*!40000 ALTER TABLE `classes` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `configs` +-- + +DROP TABLE IF EXISTS `configs`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `configs` ( + `id` int NOT NULL AUTO_INCREMENT, + `tenant_id` int NOT NULL, + `key` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, + `value` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, + `description` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `creator` int DEFAULT NULL, + `modifier` int DEFAULT NULL, + `create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `modify_time` datetime(3) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `configs_tenant_id_key_key` (`tenant_id`,`key`), + KEY `configs_creator_fkey` (`creator`), + KEY `configs_modifier_fkey` (`modifier`), + CONSTRAINT `configs_creator_fkey` FOREIGN KEY (`creator`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `configs_modifier_fkey` FOREIGN KEY (`modifier`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `configs_tenant_id_fkey` FOREIGN KEY (`tenant_id`) REFERENCES `tenants` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `configs` +-- + +LOCK TABLES `configs` WRITE; +/*!40000 ALTER TABLE `configs` DISABLE KEYS */; +/*!40000 ALTER TABLE `configs` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `departments` +-- + +DROP TABLE IF EXISTS `departments`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `departments` ( + `id` int NOT NULL AUTO_INCREMENT, + `tenant_id` int NOT NULL, + `name` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, + `code` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, + `parent_id` int DEFAULT NULL, + `description` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `sort` int NOT NULL DEFAULT '0', + `valid_state` int NOT NULL DEFAULT '1', + `creator` int DEFAULT NULL, + `modifier` int DEFAULT NULL, + `create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `modify_time` datetime(3) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `departments_tenant_id_code_key` (`tenant_id`,`code`), + KEY `departments_parent_id_fkey` (`parent_id`), + KEY `departments_creator_fkey` (`creator`), + KEY `departments_modifier_fkey` (`modifier`), + CONSTRAINT `departments_creator_fkey` FOREIGN KEY (`creator`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `departments_modifier_fkey` FOREIGN KEY (`modifier`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `departments_parent_id_fkey` FOREIGN KEY (`parent_id`) REFERENCES `departments` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `departments_tenant_id_fkey` FOREIGN KEY (`tenant_id`) REFERENCES `tenants` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `departments` +-- + +LOCK TABLES `departments` WRITE; +/*!40000 ALTER TABLE `departments` DISABLE KEYS */; +/*!40000 ALTER TABLE `departments` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `dict_items` +-- + +DROP TABLE IF EXISTS `dict_items`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `dict_items` ( + `id` int NOT NULL AUTO_INCREMENT, + `dict_id` int NOT NULL, + `label` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, + `value` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, + `sort` int NOT NULL DEFAULT '0', + `valid_state` int NOT NULL DEFAULT '1', + `creator` int DEFAULT NULL, + `modifier` int DEFAULT NULL, + `create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `modify_time` datetime(3) NOT NULL, + PRIMARY KEY (`id`), + KEY `dict_items_dict_id_fkey` (`dict_id`), + KEY `dict_items_creator_fkey` (`creator`), + KEY `dict_items_modifier_fkey` (`modifier`), + CONSTRAINT `dict_items_creator_fkey` FOREIGN KEY (`creator`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `dict_items_dict_id_fkey` FOREIGN KEY (`dict_id`) REFERENCES `dicts` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `dict_items_modifier_fkey` FOREIGN KEY (`modifier`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `dict_items` +-- + +LOCK TABLES `dict_items` WRITE; +/*!40000 ALTER TABLE `dict_items` DISABLE KEYS */; +/*!40000 ALTER TABLE `dict_items` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `dicts` +-- + +DROP TABLE IF EXISTS `dicts`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `dicts` ( + `id` int NOT NULL AUTO_INCREMENT, + `tenant_id` int NOT NULL, + `name` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, + `code` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, + `description` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `valid_state` int NOT NULL DEFAULT '1', + `creator` int DEFAULT NULL, + `modifier` int DEFAULT NULL, + `create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `modify_time` datetime(3) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `dicts_tenant_id_code_key` (`tenant_id`,`code`), + KEY `dicts_creator_fkey` (`creator`), + KEY `dicts_modifier_fkey` (`modifier`), + CONSTRAINT `dicts_creator_fkey` FOREIGN KEY (`creator`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `dicts_modifier_fkey` FOREIGN KEY (`modifier`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `dicts_tenant_id_fkey` FOREIGN KEY (`tenant_id`) REFERENCES `tenants` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `dicts` +-- + +LOCK TABLES `dicts` WRITE; +/*!40000 ALTER TABLE `dicts` DISABLE KEYS */; +/*!40000 ALTER TABLE `dicts` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `grades` +-- + +DROP TABLE IF EXISTS `grades`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `grades` ( + `id` int NOT NULL AUTO_INCREMENT, + `tenant_id` int NOT NULL, + `name` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, + `code` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, + `level` int NOT NULL, + `description` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `valid_state` int NOT NULL DEFAULT '1', + `creator` int DEFAULT NULL, + `modifier` int DEFAULT NULL, + `create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `modify_time` datetime(3) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `grades_tenant_id_code_key` (`tenant_id`,`code`), + UNIQUE KEY `grades_tenant_id_level_key` (`tenant_id`,`level`), + KEY `grades_creator_fkey` (`creator`), + KEY `grades_modifier_fkey` (`modifier`), + CONSTRAINT `grades_creator_fkey` FOREIGN KEY (`creator`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `grades_modifier_fkey` FOREIGN KEY (`modifier`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `grades_tenant_id_fkey` FOREIGN KEY (`tenant_id`) REFERENCES `tenants` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `grades` +-- + +LOCK TABLES `grades` WRITE; +/*!40000 ALTER TABLE `grades` DISABLE KEYS */; +/*!40000 ALTER TABLE `grades` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `logs` +-- + +DROP TABLE IF EXISTS `logs`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `logs` ( + `id` int NOT NULL AUTO_INCREMENT, + `user_id` int DEFAULT NULL, + `action` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, + `content` text COLLATE utf8mb4_unicode_ci, + `ip` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `user_agent` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + PRIMARY KEY (`id`), + KEY `logs_user_id_fkey` (`user_id`), + CONSTRAINT `logs_user_id_fkey` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=45 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `logs` +-- + +LOCK TABLES `logs` WRITE; +/*!40000 ALTER TABLE `logs` DISABLE KEYS */; +INSERT INTO `logs` VALUES (1,1,'GET /api/menus/user-menus','{\"method\":\"GET\",\"url\":\"/api/menus/user-menus\",\"query\":{},\"body\":{}}','::1','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36','2026-01-18 02:02:07.750'),(2,1,'GET /api/contests?page=1&pageSize=10','{\"method\":\"GET\",\"url\":\"/api/contests?page=1&pageSize=10\",\"query\":{\"page\":\"1\",\"pageSize\":\"10\"},\"body\":{}}','::1','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36','2026-01-18 02:02:08.449'),(3,1,'GET /api/tenants?page=1&pageSize=100','{\"method\":\"GET\",\"url\":\"/api/tenants?page=1&pageSize=100\",\"query\":{\"page\":\"1\",\"pageSize\":\"100\"},\"body\":{}}','::1','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36','2026-01-18 02:02:08.459'),(4,1,'GET /api/roles?page=1&pageSize=10','{\"method\":\"GET\",\"url\":\"/api/roles?page=1&pageSize=10\",\"query\":{\"page\":\"1\",\"pageSize\":\"10\"},\"body\":{}}','::1','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36','2026-01-18 02:02:13.977'),(5,1,'GET /api/permissions?page=1&pageSize=100','{\"method\":\"GET\",\"url\":\"/api/permissions?page=1&pageSize=100\",\"query\":{\"page\":\"1\",\"pageSize\":\"100\"},\"body\":{}}','::1','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36','2026-01-18 02:02:13.981'),(6,1,'GET /api/menus','{\"method\":\"GET\",\"url\":\"/api/menus\",\"query\":{},\"body\":{}}','::1','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36','2026-01-18 02:02:15.736'),(7,1,'GET /api/users?page=1&pageSize=10','{\"method\":\"GET\",\"url\":\"/api/users?page=1&pageSize=10\",\"query\":{\"page\":\"1\",\"pageSize\":\"10\"},\"body\":{}}','::1','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36','2026-01-18 02:02:17.133'),(8,1,'GET /api/roles?page=1&pageSize=100','{\"method\":\"GET\",\"url\":\"/api/roles?page=1&pageSize=100\",\"query\":{\"page\":\"1\",\"pageSize\":\"100\"},\"body\":{}}','::1','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36','2026-01-18 02:02:17.137'),(9,1,'GET /api/menus','{\"method\":\"GET\",\"url\":\"/api/menus\",\"query\":{},\"body\":{}}','::1','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36','2026-01-18 02:02:21.452'),(10,1,'GET /api/tenants?page=1&pageSize=10','{\"method\":\"GET\",\"url\":\"/api/tenants?page=1&pageSize=10\",\"query\":{\"page\":\"1\",\"pageSize\":\"10\"},\"body\":{}}','::1','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36','2026-01-18 02:02:21.459'),(11,1,'GET /api/contests?page=1&pageSize=10','{\"method\":\"GET\",\"url\":\"/api/contests?page=1&pageSize=10\",\"query\":{\"page\":\"1\",\"pageSize\":\"10\"},\"body\":{}}','::1','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36','2026-01-18 02:02:45.955'),(12,1,'GET /api/tenants?page=1&pageSize=100','{\"method\":\"GET\",\"url\":\"/api/tenants?page=1&pageSize=100\",\"query\":{\"page\":\"1\",\"pageSize\":\"100\"},\"body\":{}}','::1','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36','2026-01-18 02:02:45.963'),(13,1,'GET /api/judges-management?page=1&pageSize=10','{\"method\":\"GET\",\"url\":\"/api/judges-management?page=1&pageSize=10\",\"query\":{\"page\":\"1\",\"pageSize\":\"10\"},\"body\":{}}','::1','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36','2026-01-18 02:02:47.376'),(14,1,'GET /api/contests?contestName=&contestType=individual&page=1&pageSize=10','{\"method\":\"GET\",\"url\":\"/api/contests?contestName=&contestType=individual&page=1&pageSize=10\",\"query\":{\"contestName\":\"\",\"contestType\":\"individual\",\"page\":\"1\",\"pageSize\":\"10\"},\"body\":{}}','::1','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36','2026-01-18 02:02:47.931'),(15,1,'GET /api/contests?page=1&pageSize=10','{\"method\":\"GET\",\"url\":\"/api/contests?page=1&pageSize=10\",\"query\":{\"page\":\"1\",\"pageSize\":\"10\"},\"body\":{}}','::1','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36','2026-01-18 02:02:48.345'),(16,1,'GET /api/tenants?page=1&pageSize=100','{\"method\":\"GET\",\"url\":\"/api/tenants?page=1&pageSize=100\",\"query\":{\"page\":\"1\",\"pageSize\":\"100\"},\"body\":{}}','::1','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36','2026-01-18 02:02:48.358'),(17,2,'GET /api/menus/user-menus','{\"method\":\"GET\",\"url\":\"/api/menus/user-menus\",\"query\":{},\"body\":{}}','::1','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36','2026-01-18 02:04:06.092'),(18,2,'GET /api/contests/my-contests?page=1&pageSize=12&role=student','{\"method\":\"GET\",\"url\":\"/api/contests/my-contests?page=1&pageSize=12&role=student\",\"query\":{\"page\":\"1\",\"pageSize\":\"12\",\"role\":\"student\"},\"body\":{}}','::1','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36','2026-01-18 02:04:06.395'),(19,2,'GET /api/schools','{\"method\":\"GET\",\"url\":\"/api/schools\",\"query\":{},\"body\":{}}','::1','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36','2026-01-18 02:04:08.731'),(20,2,'GET /api/homework/homeworks?page=1&pageSize=10','{\"method\":\"GET\",\"url\":\"/api/homework/homeworks?page=1&pageSize=10\",\"query\":{\"page\":\"1\",\"pageSize\":\"10\"},\"body\":{}}','::1','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36','2026-01-18 02:04:10.670'),(21,2,'GET /api/homework/homeworks?page=1&pageSize=10','{\"method\":\"GET\",\"url\":\"/api/homework/homeworks?page=1&pageSize=10\",\"query\":{\"page\":\"1\",\"pageSize\":\"10\"},\"body\":{}}','::1','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36','2026-01-18 02:04:10.684'),(22,2,'GET /api/homework/review-rules?page=1&pageSize=10','{\"method\":\"GET\",\"url\":\"/api/homework/review-rules?page=1&pageSize=10\",\"query\":{\"page\":\"1\",\"pageSize\":\"10\"},\"body\":{}}','::1','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36','2026-01-18 02:04:11.211'),(23,2,'GET /api/users?page=1&pageSize=10','{\"method\":\"GET\",\"url\":\"/api/users?page=1&pageSize=10\",\"query\":{\"page\":\"1\",\"pageSize\":\"10\"},\"body\":{}}','::1','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36','2026-01-18 02:04:12.814'),(24,2,'GET /api/roles?page=1&pageSize=100','{\"method\":\"GET\",\"url\":\"/api/roles?page=1&pageSize=100\",\"query\":{\"page\":\"1\",\"pageSize\":\"100\"},\"body\":{}}','::1','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36','2026-01-18 02:04:12.816'),(25,2,'GET /api/roles?page=1&pageSize=10','{\"method\":\"GET\",\"url\":\"/api/roles?page=1&pageSize=10\",\"query\":{\"page\":\"1\",\"pageSize\":\"10\"},\"body\":{}}','::1','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36','2026-01-18 02:04:13.853'),(26,2,'GET /api/permissions?page=1&pageSize=100','{\"method\":\"GET\",\"url\":\"/api/permissions?page=1&pageSize=100\",\"query\":{\"page\":\"1\",\"pageSize\":\"100\"},\"body\":{}}','::1','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36','2026-01-18 02:04:13.856'),(27,2,'GET /api/users?page=1&pageSize=10','{\"method\":\"GET\",\"url\":\"/api/users?page=1&pageSize=10\",\"query\":{\"page\":\"1\",\"pageSize\":\"10\"},\"body\":{}}','::1','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36','2026-01-18 02:04:15.048'),(28,2,'GET /api/roles?page=1&pageSize=100','{\"method\":\"GET\",\"url\":\"/api/roles?page=1&pageSize=100\",\"query\":{\"page\":\"1\",\"pageSize\":\"100\"},\"body\":{}}','::1','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36','2026-01-18 02:04:15.050'),(29,2,'GET /api/permissions?page=1&pageSize=100','{\"method\":\"GET\",\"url\":\"/api/permissions?page=1&pageSize=100\",\"query\":{\"page\":\"1\",\"pageSize\":\"100\"},\"body\":{}}','::1','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36','2026-01-18 02:04:15.798'),(30,2,'GET /api/roles?page=1&pageSize=10','{\"method\":\"GET\",\"url\":\"/api/roles?page=1&pageSize=10\",\"query\":{\"page\":\"1\",\"pageSize\":\"10\"},\"body\":{}}','::1','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36','2026-01-18 02:04:15.800'),(31,2,'GET /api/roles/4','{\"method\":\"GET\",\"url\":\"/api/roles/4\",\"query\":{},\"body\":{}}','::1','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36','2026-01-18 02:04:23.704'),(32,1,'GET /api/auth/user-info','{\"method\":\"GET\",\"url\":\"/api/auth/user-info\",\"query\":{},\"body\":{}}','::1','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36','2026-01-18 02:55:25.687'),(33,1,'GET /api/auth/user-info','{\"method\":\"GET\",\"url\":\"/api/auth/user-info\",\"query\":{},\"body\":{}}','::1','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36','2026-01-18 02:55:25.731'),(34,1,'GET /api/menus/user-menus','{\"method\":\"GET\",\"url\":\"/api/menus/user-menus\",\"query\":{},\"body\":{}}','::1','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36','2026-01-18 02:55:25.736'),(35,1,'GET /api/menus/user-menus','{\"method\":\"GET\",\"url\":\"/api/menus/user-menus\",\"query\":{},\"body\":{}}','::1','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36','2026-01-18 02:55:25.773'),(36,1,'GET /api/contests?page=1&pageSize=10','{\"method\":\"GET\",\"url\":\"/api/contests?page=1&pageSize=10\",\"query\":{\"page\":\"1\",\"pageSize\":\"10\"},\"body\":{}}','::1','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36','2026-01-18 02:55:26.035'),(37,1,'GET /api/tenants?page=1&pageSize=100','{\"method\":\"GET\",\"url\":\"/api/tenants?page=1&pageSize=100\",\"query\":{\"page\":\"1\",\"pageSize\":\"100\"},\"body\":{}}','::1','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36','2026-01-18 02:55:26.048'),(38,1,'GET /api/judges-management?page=1&pageSize=10','{\"method\":\"GET\",\"url\":\"/api/judges-management?page=1&pageSize=10\",\"query\":{\"page\":\"1\",\"pageSize\":\"10\"},\"body\":{}}','::1','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36','2026-01-18 02:55:26.853'),(39,1,'GET /api/contests?contestName=&contestType=individual&page=1&pageSize=10','{\"method\":\"GET\",\"url\":\"/api/contests?contestName=&contestType=individual&page=1&pageSize=10\",\"query\":{\"contestName\":\"\",\"contestType\":\"individual\",\"page\":\"1\",\"pageSize\":\"10\"},\"body\":{}}','::1','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36','2026-01-18 02:55:27.413'),(40,1,'GET /api/contests?page=1&pageSize=10','{\"method\":\"GET\",\"url\":\"/api/contests?page=1&pageSize=10\",\"query\":{\"page\":\"1\",\"pageSize\":\"10\"},\"body\":{}}','::1','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36','2026-01-18 02:55:27.870'),(41,1,'GET /api/tenants?page=1&pageSize=100','{\"method\":\"GET\",\"url\":\"/api/tenants?page=1&pageSize=100\",\"query\":{\"page\":\"1\",\"pageSize\":\"100\"},\"body\":{}}','::1','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36','2026-01-18 02:55:27.881'),(42,1,'GET /api/menus/user-menus','{\"method\":\"GET\",\"url\":\"/api/menus/user-menus\",\"query\":{},\"body\":{}}','::1','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36','2026-01-18 02:59:58.243'),(43,1,'GET /api/contests?page=1&pageSize=10','{\"method\":\"GET\",\"url\":\"/api/contests?page=1&pageSize=10\",\"query\":{\"page\":\"1\",\"pageSize\":\"10\"},\"body\":{}}','::1','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36','2026-01-18 02:59:58.840'),(44,1,'GET /api/tenants?page=1&pageSize=100','{\"method\":\"GET\",\"url\":\"/api/tenants?page=1&pageSize=100\",\"query\":{\"page\":\"1\",\"pageSize\":\"100\"},\"body\":{}}','::1','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36','2026-01-18 02:59:58.850'); +/*!40000 ALTER TABLE `logs` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `menus` +-- + +DROP TABLE IF EXISTS `menus`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `menus` ( + `id` int NOT NULL AUTO_INCREMENT, + `name` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, + `path` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `icon` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `component` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `parent_id` int DEFAULT NULL, + `permission` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `sort` int NOT NULL DEFAULT '0', + `valid_state` int NOT NULL DEFAULT '1', + `creator` int DEFAULT NULL, + `modifier` int DEFAULT NULL, + `create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `modify_time` datetime(3) NOT NULL, + PRIMARY KEY (`id`), + KEY `menus_parent_id_fkey` (`parent_id`), + KEY `menus_creator_fkey` (`creator`), + KEY `menus_modifier_fkey` (`modifier`), + CONSTRAINT `menus_creator_fkey` FOREIGN KEY (`creator`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `menus_modifier_fkey` FOREIGN KEY (`modifier`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `menus_parent_id_fkey` FOREIGN KEY (`parent_id`) REFERENCES `menus` (`id`) ON DELETE SET NULL ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=36 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `menus` +-- + +LOCK TABLES `menus` WRITE; +/*!40000 ALTER TABLE `menus` DISABLE KEYS */; +INSERT INTO `menus` VALUES (1,'赛事活动','/activities','FlagOutlined',NULL,NULL,'activity:read',1,1,NULL,NULL,'2026-01-18 02:00:50.341','2026-01-18 02:00:50.341'),(2,'活动列表','/activities','UnorderedListOutlined','contests/Activities',1,'activity:read',1,1,NULL,NULL,'2026-01-18 02:00:50.351','2026-01-18 02:00:50.351'),(3,'我的报名','/activities/registrations','UserAddOutlined','contests/registrations/Index',1,'registration:create',2,1,NULL,NULL,'2026-01-18 02:00:50.355','2026-01-18 02:00:50.355'),(4,'我的作品','/activities/works','FileTextOutlined','contests/works/Index',1,'work:create',3,1,NULL,NULL,'2026-01-18 02:00:50.359','2026-01-18 02:00:50.359'),(5,'学校管理','/school','BankOutlined',NULL,NULL,'school:read',2,1,NULL,NULL,'2026-01-18 02:00:50.363','2026-01-18 02:00:50.363'),(6,'学校信息','/school/schools','BankOutlined','school/schools/Index',5,'school:read',1,1,NULL,NULL,'2026-01-18 02:00:50.367','2026-01-18 02:00:50.367'),(7,'部门管理','/school/departments','ApartmentOutlined','school/departments/Index',5,'department:read',2,1,NULL,NULL,'2026-01-18 02:00:50.371','2026-01-18 02:00:50.371'),(8,'年级管理','/school/grades','AppstoreOutlined','school/grades/Index',5,'grade:read',3,1,NULL,NULL,'2026-01-18 02:00:50.373','2026-01-18 02:00:50.373'),(9,'班级管理','/school/classes','TeamOutlined','school/classes/Index',5,'class:read',4,1,NULL,NULL,'2026-01-18 02:00:50.377','2026-01-18 02:00:50.377'),(10,'教师管理','/school/teachers','UserOutlined','school/teachers/Index',5,'teacher:read',5,1,NULL,NULL,'2026-01-18 02:00:50.381','2026-01-18 02:00:50.381'),(11,'学生管理','/school/students','UsergroupAddOutlined','school/students/Index',5,'student:read',6,1,NULL,NULL,'2026-01-18 02:00:50.384','2026-01-18 02:00:50.384'),(12,'赛事管理','/contests','TrophyOutlined',NULL,NULL,'contest:create',3,1,NULL,NULL,'2026-01-18 02:00:50.388','2026-01-18 02:00:50.388'),(13,'赛事列表','/contests','UnorderedListOutlined','contests/Index',12,'contest:create',1,1,NULL,NULL,'2026-01-18 02:00:50.391','2026-01-18 02:00:50.391'),(14,'评委管理','/contests/judges','SolutionOutlined','contests/judges/Index',12,'judge:read',2,1,NULL,NULL,'2026-01-18 02:00:50.396','2026-01-18 02:00:50.396'),(15,'报名管理','/contests/registrations','UserAddOutlined','contests/registrations/Index',12,'registration:approve',3,1,NULL,NULL,'2026-01-18 02:00:50.399','2026-01-18 02:00:50.399'),(16,'作品管理','/contests/works','FileTextOutlined','contests/works/Index',12,'contest:read',4,1,NULL,NULL,'2026-01-18 02:00:50.402','2026-01-18 02:00:50.402'),(17,'评审进度','/contests/review-progress','AuditOutlined','contests/reviews/Progress',12,'review-rule:read',5,1,NULL,NULL,'2026-01-18 02:00:50.404','2026-01-18 02:00:50.404'),(18,'评审规则','/contests/reviews','CheckCircleOutlined','contests/reviews/Index',12,'review-rule:read',6,1,NULL,NULL,'2026-01-18 02:00:50.407','2026-01-18 02:00:50.407'),(19,'赛果发布','/contests/results','TrophyOutlined','contests/results/Index',12,'contest:create',7,1,NULL,NULL,'2026-01-18 02:00:50.412','2026-01-18 02:00:50.412'),(20,'通知管理','/contests/notices','BellOutlined','contests/notices/Index',12,'notice:create',8,1,NULL,NULL,'2026-01-18 02:00:50.416','2026-01-18 02:00:50.416'),(21,'作业管理','/homework','FormOutlined',NULL,NULL,'homework:read',4,1,NULL,NULL,'2026-01-18 02:00:50.419','2026-01-18 02:00:50.419'),(22,'作业列表','/homework','FileTextOutlined','homework/Index',21,'homework:create',1,1,NULL,NULL,'2026-01-18 02:00:50.422','2026-01-18 02:00:50.422'),(23,'评审规则','/homework/review-rules','CheckCircleOutlined','homework/ReviewRules',21,'homework-review-rule:read',2,1,NULL,NULL,'2026-01-18 02:00:50.424','2026-01-18 02:00:50.424'),(24,'我的作业','/homework/my','BookOutlined','homework/StudentList',21,'homework-submission:create',3,1,NULL,NULL,'2026-01-18 02:00:50.429','2026-01-18 02:00:50.429'),(25,'系统管理','/system','SettingOutlined',NULL,NULL,'user:read',9,1,NULL,NULL,'2026-01-18 02:00:50.432','2026-01-18 02:00:50.432'),(26,'用户管理','/system/users','UserOutlined','system/users/Index',25,'user:read',1,1,NULL,NULL,'2026-01-18 02:00:50.436','2026-01-18 02:00:50.436'),(27,'角色管理','/system/roles','TeamOutlined','system/roles/Index',25,'role:read',2,1,NULL,NULL,'2026-01-18 02:00:50.438','2026-01-18 02:00:50.438'),(28,'菜单管理','/system/menus','MenuOutlined','system/menus/Index',25,'menu:read',3,1,NULL,NULL,'2026-01-18 02:00:50.442','2026-01-18 02:00:50.442'),(29,'数据字典','/system/dict','BookOutlined','system/dict/Index',25,'dict:read',4,1,NULL,NULL,'2026-01-18 02:00:50.446','2026-01-18 02:00:50.446'),(30,'系统配置','/system/config','ToolOutlined','system/config/Index',25,'config:read',5,1,NULL,NULL,'2026-01-18 02:00:50.450','2026-01-18 02:00:50.450'),(31,'日志记录','/system/logs','FileTextOutlined','system/logs/Index',25,'log:read',6,1,NULL,NULL,'2026-01-18 02:00:50.453','2026-01-18 02:00:50.453'),(32,'权限管理','/system/permissions','SafetyOutlined','system/permissions/Index',25,'permission:read',7,1,NULL,NULL,'2026-01-18 02:00:50.457','2026-01-18 02:00:50.457'),(33,'租户管理','/system/tenants','TeamOutlined','system/tenants/Index',25,'tenant:read',8,1,NULL,NULL,'2026-01-18 02:00:50.462','2026-01-18 02:00:50.462'),(34,'工作台','/workbench','DashboardOutlined',NULL,NULL,'ai-3d:read',10,1,NULL,NULL,'2026-01-18 02:00:50.465','2026-01-18 02:00:50.465'),(35,'3D建模实验室','/workbench/3d-lab','ExperimentOutlined','workbench/ai-3d/Index',34,'ai-3d:read',1,1,NULL,NULL,'2026-01-18 02:00:50.469','2026-01-18 02:00:50.469'); +/*!40000 ALTER TABLE `menus` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `permissions` +-- + +DROP TABLE IF EXISTS `permissions`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `permissions` ( + `id` int NOT NULL AUTO_INCREMENT, + `tenant_id` int NOT NULL, + `name` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, + `code` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, + `resource` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, + `action` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, + `description` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `valid_state` int NOT NULL DEFAULT '1', + `creator` int DEFAULT NULL, + `modifier` int DEFAULT NULL, + `create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `modify_time` datetime(3) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `permissions_tenant_id_resource_action_key` (`tenant_id`,`resource`,`action`), + UNIQUE KEY `permissions_tenant_id_code_key` (`tenant_id`,`code`), + KEY `permissions_creator_fkey` (`creator`), + KEY `permissions_modifier_fkey` (`modifier`), + CONSTRAINT `permissions_creator_fkey` FOREIGN KEY (`creator`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `permissions_modifier_fkey` FOREIGN KEY (`modifier`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `permissions_tenant_id_fkey` FOREIGN KEY (`tenant_id`) REFERENCES `tenants` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=111 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `permissions` +-- + +LOCK TABLES `permissions` WRITE; +/*!40000 ALTER TABLE `permissions` DISABLE KEYS */; +INSERT INTO `permissions` VALUES (1,1,'查看工作台','workbench:read','workbench','read','允许查看工作台',1,NULL,NULL,'2026-01-18 02:00:40.576','2026-01-18 02:00:40.576'),(2,1,'创建用户','user:create','user','create','允许创建新用户',1,NULL,NULL,'2026-01-18 02:00:40.580','2026-01-18 02:00:40.580'),(3,1,'查看用户','user:read','user','read','允许查看用户列表和详情',1,NULL,NULL,'2026-01-18 02:00:40.583','2026-01-18 02:00:40.583'),(4,1,'更新用户','user:update','user','update','允许更新用户信息',1,NULL,NULL,'2026-01-18 02:00:40.588','2026-01-18 02:00:40.588'),(5,1,'删除用户','user:delete','user','delete','允许删除用户',1,NULL,NULL,'2026-01-18 02:00:40.591','2026-01-18 02:00:40.591'),(6,1,'创建角色','role:create','role','create','允许创建新角色',1,NULL,NULL,'2026-01-18 02:00:40.595','2026-01-18 02:00:40.595'),(7,1,'查看角色','role:read','role','read','允许查看角色列表和详情',1,NULL,NULL,'2026-01-18 02:00:40.598','2026-01-18 02:00:40.598'),(8,1,'更新角色','role:update','role','update','允许更新角色信息',1,NULL,NULL,'2026-01-18 02:00:40.601','2026-01-18 02:00:40.601'),(9,1,'删除角色','role:delete','role','delete','允许删除角色',1,NULL,NULL,'2026-01-18 02:00:40.604','2026-01-18 02:00:40.604'),(10,1,'分配角色','role:assign','role','assign','允许给用户分配角色',1,NULL,NULL,'2026-01-18 02:00:40.606','2026-01-18 02:00:40.606'),(11,1,'查看权限','permission:read','permission','read','允许查看权限列表',1,NULL,NULL,'2026-01-18 02:00:40.611','2026-01-18 02:00:40.611'),(12,1,'查看菜单','menu:read','menu','read','允许查看菜单列表',1,NULL,NULL,'2026-01-18 02:00:40.614','2026-01-18 02:00:40.614'),(13,1,'创建租户','tenant:create','tenant','create','允许创建租户',1,NULL,NULL,'2026-01-18 02:00:40.617','2026-01-18 02:00:40.617'),(14,1,'查看租户','tenant:read','tenant','read','允许查看租户列表',1,NULL,NULL,'2026-01-18 02:00:40.620','2026-01-18 02:00:40.620'),(15,1,'更新租户','tenant:update','tenant','update','允许更新租户信息',1,NULL,NULL,'2026-01-18 02:00:40.622','2026-01-18 02:00:40.622'),(16,1,'删除租户','tenant:delete','tenant','delete','允许删除租户',1,NULL,NULL,'2026-01-18 02:00:40.626','2026-01-18 02:00:40.626'),(17,1,'创建赛事','contest:create','contest','create','允许创建赛事',1,NULL,NULL,'2026-01-18 02:00:40.629','2026-01-18 02:00:40.629'),(18,1,'查看赛事','contest:read','contest','read','允许查看赛事列表',1,NULL,NULL,'2026-01-18 02:00:40.632','2026-01-18 02:00:40.632'),(19,1,'更新赛事','contest:update','contest','update','允许更新赛事信息',1,NULL,NULL,'2026-01-18 02:00:40.634','2026-01-18 02:00:40.634'),(20,1,'删除赛事','contest:delete','contest','delete','允许删除赛事',1,NULL,NULL,'2026-01-18 02:00:40.637','2026-01-18 02:00:40.637'),(21,1,'发布赛事','contest:publish','contest','publish','允许发布赛事',1,NULL,NULL,'2026-01-18 02:00:40.639','2026-01-18 02:00:40.639'),(22,1,'结束赛事','contest:finish','contest','finish','允许结束赛事',1,NULL,NULL,'2026-01-18 02:00:40.643','2026-01-18 02:00:40.643'),(23,1,'创建评审规则','review-rule:create','review-rule','create','允许创建评审规则',1,NULL,NULL,'2026-01-18 02:00:40.646','2026-01-18 02:00:40.646'),(24,1,'查看评审规则','review-rule:read','review-rule','read','允许查看评审规则',1,NULL,NULL,'2026-01-18 02:00:40.648','2026-01-18 02:00:40.648'),(25,1,'更新评审规则','review-rule:update','review-rule','update','允许更新评审规则',1,NULL,NULL,'2026-01-18 02:00:40.651','2026-01-18 02:00:40.651'),(26,1,'删除评审规则','review-rule:delete','review-rule','delete','允许删除评审规则',1,NULL,NULL,'2026-01-18 02:00:40.654','2026-01-18 02:00:40.654'),(27,1,'添加评委','judge:create','judge','create','允许添加评委',1,NULL,NULL,'2026-01-18 02:00:40.656','2026-01-18 02:00:40.656'),(28,1,'查看评委','judge:read','judge','read','允许查看评委列表',1,NULL,NULL,'2026-01-18 02:00:40.659','2026-01-18 02:00:40.659'),(29,1,'更新评委','judge:update','judge','update','允许更新评委信息',1,NULL,NULL,'2026-01-18 02:00:40.662','2026-01-18 02:00:40.662'),(30,1,'删除评委','judge:delete','judge','delete','允许删除评委',1,NULL,NULL,'2026-01-18 02:00:40.664','2026-01-18 02:00:40.664'),(31,1,'分配评委','judge:assign','judge','assign','允许为赛事分配评委',1,NULL,NULL,'2026-01-18 02:00:40.667','2026-01-18 02:00:40.667'),(32,1,'查看报名','registration:read','registration','read','允许查看报名记录',1,NULL,NULL,'2026-01-18 02:00:40.669','2026-01-18 02:00:40.669'),(33,1,'审核报名','registration:approve','registration','approve','允许审核报名',1,NULL,NULL,'2026-01-18 02:00:40.672','2026-01-18 02:00:40.672'),(34,1,'查看作品','work:read','work','read','允许查看参赛作品',1,NULL,NULL,'2026-01-18 02:00:40.676','2026-01-18 02:00:40.676'),(35,1,'创建公告','notice:create','notice','create','允许创建赛事公告',1,NULL,NULL,'2026-01-18 02:00:40.679','2026-01-18 02:00:40.679'),(36,1,'查看公告','notice:read','notice','read','允许查看赛事公告',1,NULL,NULL,'2026-01-18 02:00:40.681','2026-01-18 02:00:40.681'),(37,1,'更新公告','notice:update','notice','update','允许更新公告信息',1,NULL,NULL,'2026-01-18 02:00:40.683','2026-01-18 02:00:40.683'),(38,1,'删除公告','notice:delete','notice','delete','允许删除公告',1,NULL,NULL,'2026-01-18 02:00:40.686','2026-01-18 02:00:40.686'),(39,1,'创建字典','dict:create','dict','create','允许创建新字典',1,NULL,NULL,'2026-01-18 02:00:40.688','2026-01-18 02:00:40.688'),(40,1,'查看字典','dict:read','dict','read','允许查看字典列表和详情',1,NULL,NULL,'2026-01-18 02:00:40.693','2026-01-18 02:00:40.693'),(41,1,'更新字典','dict:update','dict','update','允许更新字典信息',1,NULL,NULL,'2026-01-18 02:00:40.696','2026-01-18 02:00:40.696'),(42,1,'删除字典','dict:delete','dict','delete','允许删除字典',1,NULL,NULL,'2026-01-18 02:00:40.698','2026-01-18 02:00:40.698'),(43,1,'创建配置','config:create','config','create','允许创建新配置',1,NULL,NULL,'2026-01-18 02:00:40.701','2026-01-18 02:00:40.701'),(44,1,'查看配置','config:read','config','read','允许查看配置列表和详情',1,NULL,NULL,'2026-01-18 02:00:40.704','2026-01-18 02:00:40.704'),(45,1,'更新配置','config:update','config','update','允许更新配置信息',1,NULL,NULL,'2026-01-18 02:00:40.707','2026-01-18 02:00:40.707'),(46,1,'删除配置','config:delete','config','delete','允许删除配置',1,NULL,NULL,'2026-01-18 02:00:40.711','2026-01-18 02:00:40.711'),(47,1,'查看日志','log:read','log','read','允许查看系统日志',1,NULL,NULL,'2026-01-18 02:00:40.714','2026-01-18 02:00:40.714'),(48,1,'删除日志','log:delete','log','delete','允许删除系统日志',1,NULL,NULL,'2026-01-18 02:00:40.716','2026-01-18 02:00:40.716'),(49,2,'查看工作台','workbench:read','workbench','read','允许查看工作台',1,NULL,NULL,'2026-01-18 02:03:25.311','2026-01-18 02:03:25.311'),(50,2,'创建用户','user:create','user','create','允许创建新用户',1,NULL,NULL,'2026-01-18 02:03:25.315','2026-01-18 02:03:25.315'),(51,2,'查看用户','user:read','user','read','允许查看用户列表和详情',1,NULL,NULL,'2026-01-18 02:03:25.318','2026-01-18 02:03:25.318'),(52,2,'更新用户','user:update','user','update','允许更新用户信息',1,NULL,NULL,'2026-01-18 02:03:25.321','2026-01-18 02:03:25.321'),(53,2,'删除用户','user:delete','user','delete','允许删除用户',1,NULL,NULL,'2026-01-18 02:03:25.323','2026-01-18 02:03:25.323'),(54,2,'创建角色','role:create','role','create','允许创建新角色',1,NULL,NULL,'2026-01-18 02:03:25.326','2026-01-18 02:03:25.326'),(55,2,'查看角色','role:read','role','read','允许查看角色列表和详情',1,NULL,NULL,'2026-01-18 02:03:25.329','2026-01-18 02:03:25.329'),(56,2,'更新角色','role:update','role','update','允许更新角色信息',1,NULL,NULL,'2026-01-18 02:03:25.333','2026-01-18 02:03:25.333'),(57,2,'删除角色','role:delete','role','delete','允许删除角色',1,NULL,NULL,'2026-01-18 02:03:25.337','2026-01-18 02:03:25.337'),(58,2,'分配角色','role:assign','role','assign','允许给用户分配角色',1,NULL,NULL,'2026-01-18 02:03:25.340','2026-01-18 02:03:25.340'),(59,2,'查看权限','permission:read','permission','read','允许查看权限列表',1,NULL,NULL,'2026-01-18 02:03:25.342','2026-01-18 02:03:25.342'),(60,2,'查看菜单','menu:read','menu','read','允许查看菜单列表',1,NULL,NULL,'2026-01-18 02:03:25.345','2026-01-18 02:03:25.345'),(61,2,'创建学校','school:create','school','create','允许创建学校信息',1,NULL,NULL,'2026-01-18 02:03:25.349','2026-01-18 02:03:25.349'),(62,2,'查看学校','school:read','school','read','允许查看学校信息',1,NULL,NULL,'2026-01-18 02:03:25.352','2026-01-18 02:03:25.352'),(63,2,'更新学校','school:update','school','update','允许更新学校信息',1,NULL,NULL,'2026-01-18 02:03:25.355','2026-01-18 02:03:25.355'),(64,2,'删除学校','school:delete','school','delete','允许删除学校信息',1,NULL,NULL,'2026-01-18 02:03:25.357','2026-01-18 02:03:25.357'),(65,2,'创建部门','department:create','department','create','允许创建部门',1,NULL,NULL,'2026-01-18 02:03:25.360','2026-01-18 02:03:25.360'),(66,2,'查看部门','department:read','department','read','允许查看部门列表',1,NULL,NULL,'2026-01-18 02:03:25.363','2026-01-18 02:03:25.363'),(67,2,'更新部门','department:update','department','update','允许更新部门信息',1,NULL,NULL,'2026-01-18 02:03:25.366','2026-01-18 02:03:25.366'),(68,2,'删除部门','department:delete','department','delete','允许删除部门',1,NULL,NULL,'2026-01-18 02:03:25.369','2026-01-18 02:03:25.369'),(69,2,'创建年级','grade:create','grade','create','允许创建年级',1,NULL,NULL,'2026-01-18 02:03:25.372','2026-01-18 02:03:25.372'),(70,2,'查看年级','grade:read','grade','read','允许查看年级列表',1,NULL,NULL,'2026-01-18 02:03:25.374','2026-01-18 02:03:25.374'),(71,2,'更新年级','grade:update','grade','update','允许更新年级信息',1,NULL,NULL,'2026-01-18 02:03:25.378','2026-01-18 02:03:25.378'),(72,2,'删除年级','grade:delete','grade','delete','允许删除年级',1,NULL,NULL,'2026-01-18 02:03:25.381','2026-01-18 02:03:25.381'),(73,2,'创建班级','class:create','class','create','允许创建班级',1,NULL,NULL,'2026-01-18 02:03:25.384','2026-01-18 02:03:25.384'),(74,2,'查看班级','class:read','class','read','允许查看班级列表',1,NULL,NULL,'2026-01-18 02:03:25.387','2026-01-18 02:03:25.387'),(75,2,'更新班级','class:update','class','update','允许更新班级信息',1,NULL,NULL,'2026-01-18 02:03:25.389','2026-01-18 02:03:25.389'),(76,2,'删除班级','class:delete','class','delete','允许删除班级',1,NULL,NULL,'2026-01-18 02:03:25.392','2026-01-18 02:03:25.392'),(77,2,'创建教师','teacher:create','teacher','create','允许创建教师',1,NULL,NULL,'2026-01-18 02:03:25.396','2026-01-18 02:03:25.396'),(78,2,'查看教师','teacher:read','teacher','read','允许查看教师列表',1,NULL,NULL,'2026-01-18 02:03:25.399','2026-01-18 02:03:25.399'),(79,2,'更新教师','teacher:update','teacher','update','允许更新教师信息',1,NULL,NULL,'2026-01-18 02:03:25.401','2026-01-18 02:03:25.401'),(80,2,'删除教师','teacher:delete','teacher','delete','允许删除教师',1,NULL,NULL,'2026-01-18 02:03:25.404','2026-01-18 02:03:25.404'),(81,2,'创建学生','student:create','student','create','允许创建学生',1,NULL,NULL,'2026-01-18 02:03:25.406','2026-01-18 02:03:25.406'),(82,2,'查看学生','student:read','student','read','允许查看学生列表',1,NULL,NULL,'2026-01-18 02:03:25.408','2026-01-18 02:03:25.408'),(83,2,'更新学生','student:update','student','update','允许更新学生信息',1,NULL,NULL,'2026-01-18 02:03:25.410','2026-01-18 02:03:25.410'),(84,2,'删除学生','student:delete','student','delete','允许删除学生',1,NULL,NULL,'2026-01-18 02:03:25.412','2026-01-18 02:03:25.412'),(85,2,'查看赛事活动','activity:read','activity','read','允许查看已发布的赛事活动',1,NULL,NULL,'2026-01-18 02:03:25.414','2026-01-18 02:03:25.414'),(86,2,'指导学生','activity:guidance','activity','guidance','允许指导学生参赛',1,NULL,NULL,'2026-01-18 02:03:25.416','2026-01-18 02:03:25.416'),(87,2,'创建报名','registration:create','registration','create','允许报名赛事',1,NULL,NULL,'2026-01-18 02:03:25.418','2026-01-18 02:03:25.418'),(88,2,'查看报名','registration:read','registration','read','允许查看报名记录',1,NULL,NULL,'2026-01-18 02:03:25.420','2026-01-18 02:03:25.420'),(89,2,'更新报名','registration:update','registration','update','允许更新报名信息',1,NULL,NULL,'2026-01-18 02:03:25.422','2026-01-18 02:03:25.422'),(90,2,'取消报名','registration:delete','registration','delete','允许取消报名',1,NULL,NULL,'2026-01-18 02:03:25.424','2026-01-18 02:03:25.424'),(91,2,'上传作品','work:create','work','create','允许上传参赛作品',1,NULL,NULL,'2026-01-18 02:03:25.427','2026-01-18 02:03:25.427'),(92,2,'查看作品','work:read','work','read','允许查看参赛作品',1,NULL,NULL,'2026-01-18 02:03:25.429','2026-01-18 02:03:25.429'),(93,2,'更新作品','work:update','work','update','允许更新作品信息',1,NULL,NULL,'2026-01-18 02:03:25.431','2026-01-18 02:03:25.431'),(94,2,'删除作品','work:delete','work','delete','允许删除作品',1,NULL,NULL,'2026-01-18 02:03:25.433','2026-01-18 02:03:25.433'),(95,2,'提交作品','work:submit','work','submit','允许提交作品',1,NULL,NULL,'2026-01-18 02:03:25.435','2026-01-18 02:03:25.435'),(96,2,'查看公告','notice:read','notice','read','允许查看赛事公告',1,NULL,NULL,'2026-01-18 02:03:25.437','2026-01-18 02:03:25.437'),(97,2,'创建作业','homework:create','homework','create','允许创建作业',1,NULL,NULL,'2026-01-18 02:03:25.439','2026-01-18 02:03:25.439'),(98,2,'查看作业','homework:read','homework','read','允许查看作业列表',1,NULL,NULL,'2026-01-18 02:03:25.442','2026-01-18 02:03:25.442'),(99,2,'更新作业','homework:update','homework','update','允许更新作业信息',1,NULL,NULL,'2026-01-18 02:03:25.445','2026-01-18 02:03:25.445'),(100,2,'删除作业','homework:delete','homework','delete','允许删除作业',1,NULL,NULL,'2026-01-18 02:03:25.448','2026-01-18 02:03:25.448'),(101,2,'发布作业','homework:publish','homework','publish','允许发布作业',1,NULL,NULL,'2026-01-18 02:03:25.450','2026-01-18 02:03:25.450'),(102,2,'提交作业','homework-submission:create','homework-submission','create','允许提交作业',1,NULL,NULL,'2026-01-18 02:03:25.452','2026-01-18 02:03:25.452'),(103,2,'查看作业提交','homework-submission:read','homework-submission','read','允许查看作业提交记录',1,NULL,NULL,'2026-01-18 02:03:25.454','2026-01-18 02:03:25.454'),(104,2,'更新作业提交','homework-submission:update','homework-submission','update','允许更新提交的作业',1,NULL,NULL,'2026-01-18 02:03:25.456','2026-01-18 02:03:25.456'),(105,2,'创建作业评审规则','homework-review-rule:create','homework-review-rule','create','允许创建作业评审规则',1,NULL,NULL,'2026-01-18 02:03:25.460','2026-01-18 02:03:25.460'),(106,2,'查看作业评审规则','homework-review-rule:read','homework-review-rule','read','允许查看作业评审规则',1,NULL,NULL,'2026-01-18 02:03:25.462','2026-01-18 02:03:25.462'),(107,2,'更新作业评审规则','homework-review-rule:update','homework-review-rule','update','允许更新作业评审规则',1,NULL,NULL,'2026-01-18 02:03:25.465','2026-01-18 02:03:25.465'),(108,2,'删除作业评审规则','homework-review-rule:delete','homework-review-rule','delete','允许删除作业评审规则',1,NULL,NULL,'2026-01-18 02:03:25.467','2026-01-18 02:03:25.467'),(109,2,'作业评分','homework-score:create','homework-score','create','允许对作业评分',1,NULL,NULL,'2026-01-18 02:03:25.470','2026-01-18 02:03:25.470'),(110,2,'查看作业评分','homework-score:read','homework-score','read','允许查看作业评分',1,NULL,NULL,'2026-01-18 02:03:25.472','2026-01-18 02:03:25.472'); +/*!40000 ALTER TABLE `permissions` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `role_permissions` +-- + +DROP TABLE IF EXISTS `role_permissions`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `role_permissions` ( + `id` int NOT NULL AUTO_INCREMENT, + `role_id` int NOT NULL, + `permission_id` int NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `role_permissions_role_id_permission_id_key` (`role_id`,`permission_id`), + KEY `role_permissions_permission_id_fkey` (`permission_id`), + CONSTRAINT `role_permissions_permission_id_fkey` FOREIGN KEY (`permission_id`) REFERENCES `permissions` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `role_permissions_role_id_fkey` FOREIGN KEY (`role_id`) REFERENCES `roles` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=140 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `role_permissions` +-- + +LOCK TABLES `role_permissions` WRITE; +/*!40000 ALTER TABLE `role_permissions` DISABLE KEYS */; +INSERT INTO `role_permissions` VALUES (1,1,1),(2,1,2),(3,1,3),(4,1,4),(5,1,5),(6,1,6),(7,1,7),(8,1,8),(9,1,9),(10,1,10),(11,1,11),(12,1,12),(13,1,13),(14,1,14),(15,1,15),(16,1,16),(17,1,17),(18,1,18),(19,1,19),(20,1,20),(21,1,21),(22,1,22),(23,1,23),(24,1,24),(25,1,25),(26,1,26),(27,1,27),(28,1,28),(29,1,29),(30,1,30),(31,1,31),(32,1,32),(33,1,33),(34,1,34),(35,1,35),(36,1,36),(37,1,37),(38,1,38),(39,1,39),(40,1,40),(41,1,41),(42,1,42),(43,1,43),(44,1,44),(45,1,45),(46,1,46),(47,1,47),(48,1,48),(49,2,49),(50,2,50),(51,2,51),(52,2,52),(53,2,53),(54,2,54),(55,2,55),(56,2,56),(57,2,57),(58,2,58),(59,2,59),(60,2,60),(61,2,61),(62,2,62),(63,2,63),(64,2,64),(65,2,65),(66,2,66),(67,2,67),(68,2,68),(69,2,69),(70,2,70),(71,2,71),(72,2,72),(73,2,73),(74,2,74),(75,2,75),(76,2,76),(77,2,77),(78,2,78),(79,2,79),(80,2,80),(81,2,81),(82,2,82),(83,2,83),(84,2,84),(85,2,85),(87,2,88),(88,2,92),(86,2,96),(89,2,97),(90,2,98),(91,2,99),(92,2,100),(93,2,101),(94,2,103),(95,2,105),(96,2,106),(97,2,107),(98,2,108),(99,2,110),(100,3,49),(101,3,70),(102,3,74),(103,3,82),(104,3,85),(105,3,86),(107,3,87),(108,3,88),(109,3,89),(110,3,90),(111,3,91),(112,3,92),(113,3,93),(114,3,95),(106,3,96),(115,3,97),(116,3,98),(117,3,99),(118,3,100),(119,3,101),(120,3,103),(121,3,105),(122,3,106),(123,3,107),(124,3,108),(125,3,109),(126,3,110),(127,4,49),(128,4,85),(130,4,88),(131,4,91),(132,4,92),(133,4,93),(134,4,95),(129,4,96),(135,4,98),(136,4,102),(137,4,103),(138,4,104),(139,4,110); +/*!40000 ALTER TABLE `role_permissions` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `roles` +-- + +DROP TABLE IF EXISTS `roles`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `roles` ( + `id` int NOT NULL AUTO_INCREMENT, + `tenant_id` int NOT NULL, + `name` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, + `code` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, + `description` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `valid_state` int NOT NULL DEFAULT '1', + `creator` int DEFAULT NULL, + `modifier` int DEFAULT NULL, + `create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `modify_time` datetime(3) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `roles_tenant_id_name_key` (`tenant_id`,`name`), + UNIQUE KEY `roles_tenant_id_code_key` (`tenant_id`,`code`), + KEY `roles_creator_fkey` (`creator`), + KEY `roles_modifier_fkey` (`modifier`), + CONSTRAINT `roles_creator_fkey` FOREIGN KEY (`creator`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `roles_modifier_fkey` FOREIGN KEY (`modifier`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `roles_tenant_id_fkey` FOREIGN KEY (`tenant_id`) REFERENCES `tenants` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `roles` +-- + +LOCK TABLES `roles` WRITE; +/*!40000 ALTER TABLE `roles` DISABLE KEYS */; +INSERT INTO `roles` VALUES (1,1,'超级管理员','super_admin','拥有系统所有权限的超级管理员角色',1,NULL,NULL,'2026-01-18 02:00:23.928','2026-01-18 02:00:40.723'),(2,2,'学校管理员','school_admin','学校管理员,管理学校信息、教师、学生等',1,NULL,NULL,'2026-01-18 02:03:25.475','2026-01-18 02:03:25.475'),(3,2,'教师','teacher','教师角色,可以报名赛事、指导学生、管理作业',1,NULL,NULL,'2026-01-18 02:03:25.596','2026-01-18 02:03:25.596'),(4,2,'学生','student','学生角色,可以查看赛事、上传作品、提交作业',1,NULL,NULL,'2026-01-18 02:03:25.666','2026-01-18 02:03:25.666'); +/*!40000 ALTER TABLE `roles` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `schools` +-- + +DROP TABLE IF EXISTS `schools`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `schools` ( + `id` int NOT NULL AUTO_INCREMENT, + `tenant_id` int NOT NULL, + `address` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `phone` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `principal` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `established` datetime(3) DEFAULT NULL, + `description` text COLLATE utf8mb4_unicode_ci, + `logo` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `website` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `creator` int DEFAULT NULL, + `modifier` int DEFAULT NULL, + `create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `modify_time` datetime(3) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `schools_tenant_id_key` (`tenant_id`), + KEY `schools_creator_fkey` (`creator`), + KEY `schools_modifier_fkey` (`modifier`), + CONSTRAINT `schools_creator_fkey` FOREIGN KEY (`creator`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `schools_modifier_fkey` FOREIGN KEY (`modifier`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `schools_tenant_id_fkey` FOREIGN KEY (`tenant_id`) REFERENCES `tenants` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `schools` +-- + +LOCK TABLES `schools` WRITE; +/*!40000 ALTER TABLE `schools` DISABLE KEYS */; +/*!40000 ALTER TABLE `schools` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `student_interest_classes` +-- + +DROP TABLE IF EXISTS `student_interest_classes`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `student_interest_classes` ( + `id` int NOT NULL AUTO_INCREMENT, + `student_id` int NOT NULL, + `class_id` int NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `student_interest_classes_student_id_class_id_key` (`student_id`,`class_id`), + KEY `student_interest_classes_class_id_fkey` (`class_id`), + CONSTRAINT `student_interest_classes_class_id_fkey` FOREIGN KEY (`class_id`) REFERENCES `classes` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `student_interest_classes_student_id_fkey` FOREIGN KEY (`student_id`) REFERENCES `students` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `student_interest_classes` +-- + +LOCK TABLES `student_interest_classes` WRITE; +/*!40000 ALTER TABLE `student_interest_classes` DISABLE KEYS */; +/*!40000 ALTER TABLE `student_interest_classes` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `students` +-- + +DROP TABLE IF EXISTS `students`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `students` ( + `id` int NOT NULL AUTO_INCREMENT, + `user_id` int NOT NULL, + `tenant_id` int NOT NULL, + `class_id` int NOT NULL, + `student_no` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `phone` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `id_card` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `gender` int DEFAULT NULL, + `birth_date` datetime(3) DEFAULT NULL, + `enrollment_date` datetime(3) DEFAULT NULL, + `parent_name` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `parent_phone` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `address` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `description` text COLLATE utf8mb4_unicode_ci, + `valid_state` int NOT NULL DEFAULT '1', + `creator` int DEFAULT NULL, + `modifier` int DEFAULT NULL, + `create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `modify_time` datetime(3) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `students_user_id_key` (`user_id`), + UNIQUE KEY `students_tenant_id_student_no_key` (`tenant_id`,`student_no`), + KEY `students_class_id_fkey` (`class_id`), + KEY `students_creator_fkey` (`creator`), + KEY `students_modifier_fkey` (`modifier`), + CONSTRAINT `students_class_id_fkey` FOREIGN KEY (`class_id`) REFERENCES `classes` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE, + CONSTRAINT `students_creator_fkey` FOREIGN KEY (`creator`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `students_modifier_fkey` FOREIGN KEY (`modifier`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `students_tenant_id_fkey` FOREIGN KEY (`tenant_id`) REFERENCES `tenants` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `students_user_id_fkey` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `students` +-- + +LOCK TABLES `students` WRITE; +/*!40000 ALTER TABLE `students` DISABLE KEYS */; +/*!40000 ALTER TABLE `students` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `t_ai_3d_task` +-- + +DROP TABLE IF EXISTS `t_ai_3d_task`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `t_ai_3d_task` ( + `id` int NOT NULL AUTO_INCREMENT, + `tenant_id` int NOT NULL, + `user_id` int NOT NULL, + `input_type` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, + `input_content` text COLLATE utf8mb4_unicode_ci NOT NULL, + `generate_type` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'Normal', + `status` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'pending', + `result_url` text COLLATE utf8mb4_unicode_ci, + `preview_url` text COLLATE utf8mb4_unicode_ci, + `result_urls` json DEFAULT NULL, + `preview_urls` json DEFAULT NULL, + `error_message` text COLLATE utf8mb4_unicode_ci, + `external_task_id` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `retry_count` int NOT NULL DEFAULT '0', + `create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `complete_time` datetime(3) DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `t_ai_3d_task_user_id_idx` (`user_id`), + KEY `t_ai_3d_task_tenant_id_idx` (`tenant_id`), + KEY `t_ai_3d_task_status_idx` (`status`), + KEY `t_ai_3d_task_create_time_idx` (`create_time`), + CONSTRAINT `t_ai_3d_task_tenant_id_fkey` FOREIGN KEY (`tenant_id`) REFERENCES `tenants` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `t_ai_3d_task_user_id_fkey` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `t_ai_3d_task` +-- + +LOCK TABLES `t_ai_3d_task` WRITE; +/*!40000 ALTER TABLE `t_ai_3d_task` DISABLE KEYS */; +/*!40000 ALTER TABLE `t_ai_3d_task` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `t_contest` +-- + +DROP TABLE IF EXISTS `t_contest`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `t_contest` ( + `id` int NOT NULL AUTO_INCREMENT, + `contest_name` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, + `contest_type` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, + `contest_state` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'unpublished', + `status` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'ongoing', + `start_time` datetime(3) NOT NULL, + `end_time` datetime(3) NOT NULL, + `address` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `content` text COLLATE utf8mb4_unicode_ci, + `contest_tenants` json DEFAULT NULL, + `cover_url` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `poster_url` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `contact_name` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `contact_phone` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `contact_qrcode` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `organizers` json DEFAULT NULL, + `co_organizers` json DEFAULT NULL, + `sponsors` json DEFAULT NULL, + `register_start_time` datetime(3) NOT NULL, + `register_end_time` datetime(3) NOT NULL, + `register_state` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `require_audit` tinyint(1) NOT NULL DEFAULT '1', + `allowed_grades` json DEFAULT NULL, + `allowed_classes` json DEFAULT NULL, + `team_min_members` int DEFAULT NULL, + `team_max_members` int DEFAULT NULL, + `submit_rule` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'once', + `submit_start_time` datetime(3) NOT NULL, + `submit_end_time` datetime(3) NOT NULL, + `work_type` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `work_requirement` text COLLATE utf8mb4_unicode_ci, + `review_rule_id` int DEFAULT NULL, + `review_start_time` datetime(3) NOT NULL, + `review_end_time` datetime(3) NOT NULL, + `result_state` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'unpublished', + `result_publish_time` datetime(3) DEFAULT NULL, + `creator` int DEFAULT NULL, + `modifier` int DEFAULT NULL, + `create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `modify_time` datetime(3) NOT NULL, + `valid_state` int NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `t_contest_contest_name_key` (`contest_name`), + KEY `t_contest_contest_state_idx` (`contest_state`), + KEY `t_contest_start_time_end_time_idx` (`start_time`,`end_time`), + KEY `t_contest_review_rule_id_idx` (`review_rule_id`), + KEY `t_contest_creator_fkey` (`creator`), + KEY `t_contest_modifier_fkey` (`modifier`), + CONSTRAINT `t_contest_creator_fkey` FOREIGN KEY (`creator`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `t_contest_modifier_fkey` FOREIGN KEY (`modifier`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `t_contest_review_rule_id_fkey` FOREIGN KEY (`review_rule_id`) REFERENCES `t_contest_review_rule` (`id`) ON DELETE SET NULL ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `t_contest` +-- + +LOCK TABLES `t_contest` WRITE; +/*!40000 ALTER TABLE `t_contest` DISABLE KEYS */; +/*!40000 ALTER TABLE `t_contest` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `t_contest_attachment` +-- + +DROP TABLE IF EXISTS `t_contest_attachment`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `t_contest_attachment` ( + `id` int NOT NULL AUTO_INCREMENT, + `contest_id` int NOT NULL, + `file_name` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, + `file_url` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, + `format` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `file_type` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `size` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '0', + `creator` int DEFAULT NULL, + `modifier` int DEFAULT NULL, + `create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `modify_time` datetime(3) NOT NULL, + `valid_state` int NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + KEY `t_contest_attachment_contest_id_idx` (`contest_id`), + KEY `t_contest_attachment_creator_fkey` (`creator`), + KEY `t_contest_attachment_modifier_fkey` (`modifier`), + CONSTRAINT `t_contest_attachment_contest_id_fkey` FOREIGN KEY (`contest_id`) REFERENCES `t_contest` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `t_contest_attachment_creator_fkey` FOREIGN KEY (`creator`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `t_contest_attachment_modifier_fkey` FOREIGN KEY (`modifier`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `t_contest_attachment` +-- + +LOCK TABLES `t_contest_attachment` WRITE; +/*!40000 ALTER TABLE `t_contest_attachment` DISABLE KEYS */; +/*!40000 ALTER TABLE `t_contest_attachment` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `t_contest_judge` +-- + +DROP TABLE IF EXISTS `t_contest_judge`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `t_contest_judge` ( + `id` int NOT NULL AUTO_INCREMENT, + `contest_id` int NOT NULL, + `judge_id` int NOT NULL, + `specialty` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `weight` decimal(3,2) DEFAULT NULL, + `description` text COLLATE utf8mb4_unicode_ci, + `creator` int DEFAULT NULL, + `modifier` int DEFAULT NULL, + `create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `modify_time` datetime(3) NOT NULL, + `valid_state` int NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `t_contest_judge_contest_id_judge_id_key` (`contest_id`,`judge_id`), + KEY `t_contest_judge_contest_id_idx` (`contest_id`), + KEY `t_contest_judge_judge_id_idx` (`judge_id`), + KEY `t_contest_judge_creator_fkey` (`creator`), + KEY `t_contest_judge_modifier_fkey` (`modifier`), + CONSTRAINT `t_contest_judge_contest_id_fkey` FOREIGN KEY (`contest_id`) REFERENCES `t_contest` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `t_contest_judge_creator_fkey` FOREIGN KEY (`creator`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `t_contest_judge_judge_id_fkey` FOREIGN KEY (`judge_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `t_contest_judge_modifier_fkey` FOREIGN KEY (`modifier`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `t_contest_judge` +-- + +LOCK TABLES `t_contest_judge` WRITE; +/*!40000 ALTER TABLE `t_contest_judge` DISABLE KEYS */; +/*!40000 ALTER TABLE `t_contest_judge` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `t_contest_notice` +-- + +DROP TABLE IF EXISTS `t_contest_notice`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `t_contest_notice` ( + `id` int NOT NULL AUTO_INCREMENT, + `contest_id` int NOT NULL, + `title` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, + `content` text COLLATE utf8mb4_unicode_ci NOT NULL, + `notice_type` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'manual', + `priority` int NOT NULL DEFAULT '0', + `publish_time` datetime(3) DEFAULT NULL, + `creator` int DEFAULT NULL, + `modifier` int DEFAULT NULL, + `create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `modify_time` datetime(3) NOT NULL, + `valid_state` int NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + KEY `t_contest_notice_contest_id_idx` (`contest_id`), + KEY `t_contest_notice_publish_time_idx` (`publish_time`), + KEY `t_contest_notice_notice_type_idx` (`notice_type`), + KEY `t_contest_notice_creator_fkey` (`creator`), + KEY `t_contest_notice_modifier_fkey` (`modifier`), + CONSTRAINT `t_contest_notice_contest_id_fkey` FOREIGN KEY (`contest_id`) REFERENCES `t_contest` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `t_contest_notice_creator_fkey` FOREIGN KEY (`creator`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `t_contest_notice_modifier_fkey` FOREIGN KEY (`modifier`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `t_contest_notice` +-- + +LOCK TABLES `t_contest_notice` WRITE; +/*!40000 ALTER TABLE `t_contest_notice` DISABLE KEYS */; +/*!40000 ALTER TABLE `t_contest_notice` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `t_contest_registration` +-- + +DROP TABLE IF EXISTS `t_contest_registration`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `t_contest_registration` ( + `id` int NOT NULL AUTO_INCREMENT, + `contest_id` int NOT NULL, + `tenant_id` int NOT NULL, + `registration_type` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `team_id` int DEFAULT NULL, + `team_name` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `user_id` int NOT NULL, + `account_no` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, + `account_name` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, + `role` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `registration_state` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'pending', + `registrant` int DEFAULT NULL, + `registration_time` datetime(3) NOT NULL, + `reason` varchar(1023) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `operator` int DEFAULT NULL, + `operation_date` datetime(3) DEFAULT NULL, + `creator` int DEFAULT NULL, + `modifier` int DEFAULT NULL, + `create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `modify_time` datetime(3) NOT NULL, + PRIMARY KEY (`id`), + KEY `t_contest_registration_contest_id_tenant_id_idx` (`contest_id`,`tenant_id`), + KEY `t_contest_registration_user_id_contest_id_idx` (`user_id`,`contest_id`), + KEY `t_contest_registration_team_id_idx` (`team_id`), + KEY `t_contest_registration_registration_state_idx` (`registration_state`), + KEY `t_contest_registration_tenant_id_fkey` (`tenant_id`), + KEY `t_contest_registration_creator_fkey` (`creator`), + KEY `t_contest_registration_modifier_fkey` (`modifier`), + CONSTRAINT `t_contest_registration_contest_id_fkey` FOREIGN KEY (`contest_id`) REFERENCES `t_contest` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `t_contest_registration_creator_fkey` FOREIGN KEY (`creator`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `t_contest_registration_modifier_fkey` FOREIGN KEY (`modifier`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `t_contest_registration_team_id_fkey` FOREIGN KEY (`team_id`) REFERENCES `t_contest_team` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `t_contest_registration_tenant_id_fkey` FOREIGN KEY (`tenant_id`) REFERENCES `tenants` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `t_contest_registration_user_id_fkey` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `t_contest_registration` +-- + +LOCK TABLES `t_contest_registration` WRITE; +/*!40000 ALTER TABLE `t_contest_registration` DISABLE KEYS */; +/*!40000 ALTER TABLE `t_contest_registration` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `t_contest_registration_teacher` +-- + +DROP TABLE IF EXISTS `t_contest_registration_teacher`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `t_contest_registration_teacher` ( + `id` int NOT NULL AUTO_INCREMENT, + `registration_id` int NOT NULL, + `tenant_id` int NOT NULL, + `user_id` int NOT NULL, + `is_default` tinyint(1) NOT NULL DEFAULT '0', + `creator` int DEFAULT NULL, + `modifier` int DEFAULT NULL, + `create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `modify_time` datetime(3) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `t_contest_registration_teacher_tenant_id_registration_id_use_key` (`tenant_id`,`registration_id`,`user_id`), + KEY `t_contest_registration_teacher_registration_id_idx` (`registration_id`), + KEY `t_contest_registration_teacher_user_id_idx` (`user_id`), + KEY `t_contest_registration_teacher_creator_fkey` (`creator`), + KEY `t_contest_registration_teacher_modifier_fkey` (`modifier`), + CONSTRAINT `t_contest_registration_teacher_creator_fkey` FOREIGN KEY (`creator`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `t_contest_registration_teacher_modifier_fkey` FOREIGN KEY (`modifier`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `t_contest_registration_teacher_registration_id_fkey` FOREIGN KEY (`registration_id`) REFERENCES `t_contest_registration` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `t_contest_registration_teacher_tenant_id_fkey` FOREIGN KEY (`tenant_id`) REFERENCES `tenants` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `t_contest_registration_teacher_user_id_fkey` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `t_contest_registration_teacher` +-- + +LOCK TABLES `t_contest_registration_teacher` WRITE; +/*!40000 ALTER TABLE `t_contest_registration_teacher` DISABLE KEYS */; +/*!40000 ALTER TABLE `t_contest_registration_teacher` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `t_contest_review_rule` +-- + +DROP TABLE IF EXISTS `t_contest_review_rule`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `t_contest_review_rule` ( + `id` int NOT NULL AUTO_INCREMENT, + `tenant_id` int NOT NULL, + `rule_name` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, + `rule_description` text COLLATE utf8mb4_unicode_ci, + `judge_count` int DEFAULT NULL, + `dimensions` json NOT NULL, + `calculation_rule` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'average', + `creator` int DEFAULT NULL, + `modifier` int DEFAULT NULL, + `create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `modify_time` datetime(3) NOT NULL, + `valid_state` int NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + KEY `t_contest_review_rule_tenant_id_idx` (`tenant_id`), + KEY `t_contest_review_rule_creator_fkey` (`creator`), + KEY `t_contest_review_rule_modifier_fkey` (`modifier`), + CONSTRAINT `t_contest_review_rule_creator_fkey` FOREIGN KEY (`creator`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `t_contest_review_rule_modifier_fkey` FOREIGN KEY (`modifier`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `t_contest_review_rule_tenant_id_fkey` FOREIGN KEY (`tenant_id`) REFERENCES `tenants` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `t_contest_review_rule` +-- + +LOCK TABLES `t_contest_review_rule` WRITE; +/*!40000 ALTER TABLE `t_contest_review_rule` DISABLE KEYS */; +/*!40000 ALTER TABLE `t_contest_review_rule` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `t_contest_team` +-- + +DROP TABLE IF EXISTS `t_contest_team`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `t_contest_team` ( + `id` int NOT NULL AUTO_INCREMENT, + `tenant_id` int NOT NULL, + `contest_id` int NOT NULL, + `team_name` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, + `leader_user_id` int NOT NULL, + `max_members` int DEFAULT NULL, + `creator` int DEFAULT NULL, + `modifier` int DEFAULT NULL, + `create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `modify_time` datetime(3) NOT NULL, + `valid_state` int NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `t_contest_team_tenant_id_contest_id_team_name_key` (`tenant_id`,`contest_id`,`team_name`), + KEY `t_contest_team_contest_id_idx` (`contest_id`), + KEY `t_contest_team_leader_user_id_idx` (`leader_user_id`), + KEY `t_contest_team_creator_fkey` (`creator`), + KEY `t_contest_team_modifier_fkey` (`modifier`), + CONSTRAINT `t_contest_team_contest_id_fkey` FOREIGN KEY (`contest_id`) REFERENCES `t_contest` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `t_contest_team_creator_fkey` FOREIGN KEY (`creator`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `t_contest_team_leader_user_id_fkey` FOREIGN KEY (`leader_user_id`) REFERENCES `users` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE, + CONSTRAINT `t_contest_team_modifier_fkey` FOREIGN KEY (`modifier`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `t_contest_team_tenant_id_fkey` FOREIGN KEY (`tenant_id`) REFERENCES `tenants` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `t_contest_team` +-- + +LOCK TABLES `t_contest_team` WRITE; +/*!40000 ALTER TABLE `t_contest_team` DISABLE KEYS */; +/*!40000 ALTER TABLE `t_contest_team` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `t_contest_team_member` +-- + +DROP TABLE IF EXISTS `t_contest_team_member`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `t_contest_team_member` ( + `id` int NOT NULL AUTO_INCREMENT, + `tenant_id` int NOT NULL, + `team_id` int NOT NULL, + `user_id` int NOT NULL, + `role` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'member', + `creator` int DEFAULT NULL, + `modifier` int DEFAULT NULL, + `create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `modify_time` datetime(3) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `t_contest_team_member_tenant_id_team_id_user_id_key` (`tenant_id`,`team_id`,`user_id`), + KEY `t_contest_team_member_team_id_idx` (`team_id`), + KEY `t_contest_team_member_user_id_idx` (`user_id`), + KEY `t_contest_team_member_creator_fkey` (`creator`), + KEY `t_contest_team_member_modifier_fkey` (`modifier`), + CONSTRAINT `t_contest_team_member_creator_fkey` FOREIGN KEY (`creator`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `t_contest_team_member_modifier_fkey` FOREIGN KEY (`modifier`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `t_contest_team_member_team_id_fkey` FOREIGN KEY (`team_id`) REFERENCES `t_contest_team` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `t_contest_team_member_tenant_id_fkey` FOREIGN KEY (`tenant_id`) REFERENCES `tenants` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `t_contest_team_member_user_id_fkey` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `t_contest_team_member` +-- + +LOCK TABLES `t_contest_team_member` WRITE; +/*!40000 ALTER TABLE `t_contest_team_member` DISABLE KEYS */; +/*!40000 ALTER TABLE `t_contest_team_member` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `t_contest_work` +-- + +DROP TABLE IF EXISTS `t_contest_work`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `t_contest_work` ( + `id` int NOT NULL AUTO_INCREMENT, + `tenant_id` int NOT NULL, + `contest_id` int NOT NULL, + `registration_id` int NOT NULL, + `work_no` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `title` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, + `description` text COLLATE utf8mb4_unicode_ci, + `files` json DEFAULT NULL, + `version` int NOT NULL DEFAULT '1', + `is_latest` tinyint(1) NOT NULL DEFAULT '1', + `status` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'submitted', + `submit_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `submitter_user_id` int DEFAULT NULL, + `submitter_account_no` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `submit_source` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'teacher', + `preview_url` text COLLATE utf8mb4_unicode_ci, + `preview_urls` json DEFAULT NULL, + `ai_model_meta` json DEFAULT NULL, + `final_score` decimal(10,2) DEFAULT NULL, + `rank` int DEFAULT NULL, + `award_level` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `award_name` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `certificate_url` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `creator` int DEFAULT NULL, + `modifier` int DEFAULT NULL, + `create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `modify_time` datetime(3) NOT NULL, + `valid_state` int NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `t_contest_work_work_no_key` (`work_no`), + KEY `t_contest_work_tenant_id_contest_id_is_latest_idx` (`tenant_id`,`contest_id`,`is_latest`), + KEY `t_contest_work_registration_id_idx` (`registration_id`), + KEY `t_contest_work_tenant_id_contest_id_submit_time_status_idx` (`tenant_id`,`contest_id`,`submit_time`,`status`), + KEY `t_contest_work_contest_id_status_idx` (`contest_id`,`status`), + KEY `t_contest_work_creator_fkey` (`creator`), + KEY `t_contest_work_modifier_fkey` (`modifier`), + CONSTRAINT `t_contest_work_contest_id_fkey` FOREIGN KEY (`contest_id`) REFERENCES `t_contest` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `t_contest_work_creator_fkey` FOREIGN KEY (`creator`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `t_contest_work_modifier_fkey` FOREIGN KEY (`modifier`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `t_contest_work_registration_id_fkey` FOREIGN KEY (`registration_id`) REFERENCES `t_contest_registration` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE, + CONSTRAINT `t_contest_work_tenant_id_fkey` FOREIGN KEY (`tenant_id`) REFERENCES `tenants` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `t_contest_work` +-- + +LOCK TABLES `t_contest_work` WRITE; +/*!40000 ALTER TABLE `t_contest_work` DISABLE KEYS */; +/*!40000 ALTER TABLE `t_contest_work` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `t_contest_work_attachment` +-- + +DROP TABLE IF EXISTS `t_contest_work_attachment`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `t_contest_work_attachment` ( + `id` int NOT NULL AUTO_INCREMENT, + `tenant_id` int NOT NULL, + `contest_id` int NOT NULL, + `work_id` int NOT NULL, + `file_name` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, + `file_url` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, + `format` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `file_type` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `size` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '0', + `creator` int DEFAULT NULL, + `modifier` int DEFAULT NULL, + `create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `modify_time` datetime(3) NOT NULL, + PRIMARY KEY (`id`), + KEY `t_contest_work_attachment_tenant_id_contest_id_work_id_idx` (`tenant_id`,`contest_id`,`work_id`), + KEY `t_contest_work_attachment_work_id_fkey` (`work_id`), + KEY `t_contest_work_attachment_creator_fkey` (`creator`), + KEY `t_contest_work_attachment_modifier_fkey` (`modifier`), + CONSTRAINT `t_contest_work_attachment_creator_fkey` FOREIGN KEY (`creator`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `t_contest_work_attachment_modifier_fkey` FOREIGN KEY (`modifier`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `t_contest_work_attachment_tenant_id_fkey` FOREIGN KEY (`tenant_id`) REFERENCES `tenants` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `t_contest_work_attachment_work_id_fkey` FOREIGN KEY (`work_id`) REFERENCES `t_contest_work` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `t_contest_work_attachment` +-- + +LOCK TABLES `t_contest_work_attachment` WRITE; +/*!40000 ALTER TABLE `t_contest_work_attachment` DISABLE KEYS */; +/*!40000 ALTER TABLE `t_contest_work_attachment` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `t_contest_work_judge_assignment` +-- + +DROP TABLE IF EXISTS `t_contest_work_judge_assignment`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `t_contest_work_judge_assignment` ( + `id` int NOT NULL AUTO_INCREMENT, + `contest_id` int NOT NULL, + `work_id` int NOT NULL, + `judge_id` int NOT NULL, + `assignment_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `status` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'assigned', + `creator` int DEFAULT NULL, + `modifier` int DEFAULT NULL, + `create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `modify_time` datetime(3) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `t_contest_work_judge_assignment_work_id_judge_id_key` (`work_id`,`judge_id`), + KEY `t_contest_work_judge_assignment_contest_id_judge_id_idx` (`contest_id`,`judge_id`), + KEY `t_contest_work_judge_assignment_work_id_idx` (`work_id`), + KEY `t_contest_work_judge_assignment_status_idx` (`status`), + KEY `t_contest_work_judge_assignment_judge_id_fkey` (`judge_id`), + KEY `t_contest_work_judge_assignment_creator_fkey` (`creator`), + KEY `t_contest_work_judge_assignment_modifier_fkey` (`modifier`), + CONSTRAINT `t_contest_work_judge_assignment_contest_id_fkey` FOREIGN KEY (`contest_id`) REFERENCES `t_contest` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `t_contest_work_judge_assignment_creator_fkey` FOREIGN KEY (`creator`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `t_contest_work_judge_assignment_judge_id_fkey` FOREIGN KEY (`judge_id`) REFERENCES `users` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE, + CONSTRAINT `t_contest_work_judge_assignment_modifier_fkey` FOREIGN KEY (`modifier`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `t_contest_work_judge_assignment_work_id_fkey` FOREIGN KEY (`work_id`) REFERENCES `t_contest_work` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `t_contest_work_judge_assignment` +-- + +LOCK TABLES `t_contest_work_judge_assignment` WRITE; +/*!40000 ALTER TABLE `t_contest_work_judge_assignment` DISABLE KEYS */; +/*!40000 ALTER TABLE `t_contest_work_judge_assignment` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `t_contest_work_score` +-- + +DROP TABLE IF EXISTS `t_contest_work_score`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `t_contest_work_score` ( + `id` int NOT NULL AUTO_INCREMENT, + `tenant_id` int NOT NULL, + `contest_id` int NOT NULL, + `work_id` int NOT NULL, + `assignment_id` int NOT NULL, + `judge_id` int NOT NULL, + `judge_name` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, + `dimension_scores` json NOT NULL, + `total_score` decimal(10,2) NOT NULL, + `comments` text COLLATE utf8mb4_unicode_ci, + `score_time` datetime(3) NOT NULL, + `creator` int DEFAULT NULL, + `modifier` int DEFAULT NULL, + `create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `modify_time` datetime(3) NOT NULL, + `valid_state` int NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + KEY `t_contest_work_score_contest_id_work_id_judge_id_idx` (`contest_id`,`work_id`,`judge_id`), + KEY `t_contest_work_score_work_id_idx` (`work_id`), + KEY `t_contest_work_score_assignment_id_idx` (`assignment_id`), + KEY `t_contest_work_score_tenant_id_fkey` (`tenant_id`), + KEY `t_contest_work_score_judge_id_fkey` (`judge_id`), + KEY `t_contest_work_score_creator_fkey` (`creator`), + KEY `t_contest_work_score_modifier_fkey` (`modifier`), + CONSTRAINT `t_contest_work_score_assignment_id_fkey` FOREIGN KEY (`assignment_id`) REFERENCES `t_contest_work_judge_assignment` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE, + CONSTRAINT `t_contest_work_score_contest_id_fkey` FOREIGN KEY (`contest_id`) REFERENCES `t_contest` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `t_contest_work_score_creator_fkey` FOREIGN KEY (`creator`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `t_contest_work_score_judge_id_fkey` FOREIGN KEY (`judge_id`) REFERENCES `users` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE, + CONSTRAINT `t_contest_work_score_modifier_fkey` FOREIGN KEY (`modifier`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `t_contest_work_score_tenant_id_fkey` FOREIGN KEY (`tenant_id`) REFERENCES `tenants` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `t_contest_work_score_work_id_fkey` FOREIGN KEY (`work_id`) REFERENCES `t_contest_work` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `t_contest_work_score` +-- + +LOCK TABLES `t_contest_work_score` WRITE; +/*!40000 ALTER TABLE `t_contest_work_score` DISABLE KEYS */; +/*!40000 ALTER TABLE `t_contest_work_score` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `t_homework` +-- + +DROP TABLE IF EXISTS `t_homework`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `t_homework` ( + `id` int NOT NULL AUTO_INCREMENT, + `tenant_id` int NOT NULL, + `name` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, + `content` text COLLATE utf8mb4_unicode_ci, + `status` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'unpublished', + `publish_time` datetime(3) DEFAULT NULL, + `submit_start_time` datetime(3) NOT NULL, + `submit_end_time` datetime(3) NOT NULL, + `attachments` json DEFAULT NULL, + `publish_scope` json DEFAULT NULL, + `review_rule_id` int DEFAULT NULL, + `creator` int DEFAULT NULL, + `modifier` int DEFAULT NULL, + `create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `modify_time` datetime(3) NOT NULL, + `valid_state` int NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + KEY `t_homework_tenant_id_status_idx` (`tenant_id`,`status`), + KEY `t_homework_tenant_id_submit_start_time_submit_end_time_idx` (`tenant_id`,`submit_start_time`,`submit_end_time`), + KEY `t_homework_review_rule_id_fkey` (`review_rule_id`), + KEY `t_homework_creator_fkey` (`creator`), + KEY `t_homework_modifier_fkey` (`modifier`), + CONSTRAINT `t_homework_creator_fkey` FOREIGN KEY (`creator`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `t_homework_modifier_fkey` FOREIGN KEY (`modifier`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `t_homework_review_rule_id_fkey` FOREIGN KEY (`review_rule_id`) REFERENCES `t_homework_review_rule` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `t_homework_tenant_id_fkey` FOREIGN KEY (`tenant_id`) REFERENCES `tenants` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `t_homework` +-- + +LOCK TABLES `t_homework` WRITE; +/*!40000 ALTER TABLE `t_homework` DISABLE KEYS */; +/*!40000 ALTER TABLE `t_homework` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `t_homework_review_rule` +-- + +DROP TABLE IF EXISTS `t_homework_review_rule`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `t_homework_review_rule` ( + `id` int NOT NULL AUTO_INCREMENT, + `tenant_id` int NOT NULL, + `name` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, + `description` text COLLATE utf8mb4_unicode_ci, + `criteria` json NOT NULL, + `creator` int DEFAULT NULL, + `modifier` int DEFAULT NULL, + `create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `modify_time` datetime(3) NOT NULL, + `valid_state` int NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + KEY `t_homework_review_rule_tenant_id_idx` (`tenant_id`), + KEY `t_homework_review_rule_creator_fkey` (`creator`), + KEY `t_homework_review_rule_modifier_fkey` (`modifier`), + CONSTRAINT `t_homework_review_rule_creator_fkey` FOREIGN KEY (`creator`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `t_homework_review_rule_modifier_fkey` FOREIGN KEY (`modifier`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `t_homework_review_rule_tenant_id_fkey` FOREIGN KEY (`tenant_id`) REFERENCES `tenants` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `t_homework_review_rule` +-- + +LOCK TABLES `t_homework_review_rule` WRITE; +/*!40000 ALTER TABLE `t_homework_review_rule` DISABLE KEYS */; +/*!40000 ALTER TABLE `t_homework_review_rule` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `t_homework_score` +-- + +DROP TABLE IF EXISTS `t_homework_score`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `t_homework_score` ( + `id` int NOT NULL AUTO_INCREMENT, + `tenant_id` int NOT NULL, + `submission_id` int NOT NULL, + `reviewer_id` int NOT NULL, + `dimension_scores` json NOT NULL, + `total_score` decimal(10,2) NOT NULL, + `comments` text COLLATE utf8mb4_unicode_ci, + `score_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `creator` int DEFAULT NULL, + `modifier` int DEFAULT NULL, + `create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `modify_time` datetime(3) NOT NULL, + `valid_state` int NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `t_homework_score_submission_id_reviewer_id_key` (`submission_id`,`reviewer_id`), + KEY `t_homework_score_tenant_id_submission_id_idx` (`tenant_id`,`submission_id`), + KEY `t_homework_score_reviewer_id_idx` (`reviewer_id`), + KEY `t_homework_score_creator_fkey` (`creator`), + KEY `t_homework_score_modifier_fkey` (`modifier`), + CONSTRAINT `t_homework_score_creator_fkey` FOREIGN KEY (`creator`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `t_homework_score_modifier_fkey` FOREIGN KEY (`modifier`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `t_homework_score_reviewer_id_fkey` FOREIGN KEY (`reviewer_id`) REFERENCES `users` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE, + CONSTRAINT `t_homework_score_submission_id_fkey` FOREIGN KEY (`submission_id`) REFERENCES `t_homework_submission` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `t_homework_score_tenant_id_fkey` FOREIGN KEY (`tenant_id`) REFERENCES `tenants` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `t_homework_score` +-- + +LOCK TABLES `t_homework_score` WRITE; +/*!40000 ALTER TABLE `t_homework_score` DISABLE KEYS */; +/*!40000 ALTER TABLE `t_homework_score` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `t_homework_submission` +-- + +DROP TABLE IF EXISTS `t_homework_submission`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `t_homework_submission` ( + `id` int NOT NULL AUTO_INCREMENT, + `tenant_id` int NOT NULL, + `homework_id` int NOT NULL, + `student_id` int NOT NULL, + `work_no` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `work_name` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, + `work_description` text COLLATE utf8mb4_unicode_ci, + `files` json DEFAULT NULL, + `attachments` json DEFAULT NULL, + `submit_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `status` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'pending', + `total_score` decimal(10,2) DEFAULT NULL, + `creator` int DEFAULT NULL, + `modifier` int DEFAULT NULL, + `create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `modify_time` datetime(3) NOT NULL, + `valid_state` int NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `t_homework_submission_homework_id_student_id_key` (`homework_id`,`student_id`), + KEY `t_homework_submission_tenant_id_homework_id_idx` (`tenant_id`,`homework_id`), + KEY `t_homework_submission_student_id_idx` (`student_id`), + KEY `t_homework_submission_status_idx` (`status`), + KEY `t_homework_submission_creator_fkey` (`creator`), + KEY `t_homework_submission_modifier_fkey` (`modifier`), + CONSTRAINT `t_homework_submission_creator_fkey` FOREIGN KEY (`creator`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `t_homework_submission_homework_id_fkey` FOREIGN KEY (`homework_id`) REFERENCES `t_homework` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `t_homework_submission_modifier_fkey` FOREIGN KEY (`modifier`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `t_homework_submission_student_id_fkey` FOREIGN KEY (`student_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `t_homework_submission_tenant_id_fkey` FOREIGN KEY (`tenant_id`) REFERENCES `tenants` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `t_homework_submission` +-- + +LOCK TABLES `t_homework_submission` WRITE; +/*!40000 ALTER TABLE `t_homework_submission` DISABLE KEYS */; +/*!40000 ALTER TABLE `t_homework_submission` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `teachers` +-- + +DROP TABLE IF EXISTS `teachers`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `teachers` ( + `id` int NOT NULL AUTO_INCREMENT, + `user_id` int NOT NULL, + `tenant_id` int NOT NULL, + `department_id` int NOT NULL, + `employee_no` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `phone` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `id_card` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `gender` int DEFAULT NULL, + `birth_date` datetime(3) DEFAULT NULL, + `hire_date` datetime(3) DEFAULT NULL, + `subject` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `title` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `description` text COLLATE utf8mb4_unicode_ci, + `valid_state` int NOT NULL DEFAULT '1', + `creator` int DEFAULT NULL, + `modifier` int DEFAULT NULL, + `create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `modify_time` datetime(3) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `teachers_user_id_key` (`user_id`), + UNIQUE KEY `teachers_tenant_id_employee_no_key` (`tenant_id`,`employee_no`), + KEY `teachers_department_id_fkey` (`department_id`), + KEY `teachers_creator_fkey` (`creator`), + KEY `teachers_modifier_fkey` (`modifier`), + CONSTRAINT `teachers_creator_fkey` FOREIGN KEY (`creator`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `teachers_department_id_fkey` FOREIGN KEY (`department_id`) REFERENCES `departments` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE, + CONSTRAINT `teachers_modifier_fkey` FOREIGN KEY (`modifier`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `teachers_tenant_id_fkey` FOREIGN KEY (`tenant_id`) REFERENCES `tenants` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `teachers_user_id_fkey` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `teachers` +-- + +LOCK TABLES `teachers` WRITE; +/*!40000 ALTER TABLE `teachers` DISABLE KEYS */; +/*!40000 ALTER TABLE `teachers` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `tenant_menus` +-- + +DROP TABLE IF EXISTS `tenant_menus`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `tenant_menus` ( + `id` int NOT NULL AUTO_INCREMENT, + `tenant_id` int NOT NULL, + `menu_id` int NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `tenant_menus_tenant_id_menu_id_key` (`tenant_id`,`menu_id`), + KEY `tenant_menus_menu_id_fkey` (`menu_id`), + CONSTRAINT `tenant_menus_menu_id_fkey` FOREIGN KEY (`menu_id`) REFERENCES `menus` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `tenant_menus_tenant_id_fkey` FOREIGN KEY (`tenant_id`) REFERENCES `tenants` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=41 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `tenant_menus` +-- + +LOCK TABLES `tenant_menus` WRITE; +/*!40000 ALTER TABLE `tenant_menus` DISABLE KEYS */; +INSERT INTO `tenant_menus` VALUES (1,1,1),(2,1,2),(5,1,3),(8,1,4),(9,1,12),(3,1,13),(6,1,14),(10,1,15),(12,1,16),(14,1,17),(16,1,18),(18,1,19),(20,1,20),(22,1,25),(4,1,26),(7,1,27),(11,1,28),(13,1,29),(15,1,30),(17,1,31),(19,1,32),(21,1,33),(23,2,1),(24,2,2),(29,2,5),(25,2,6),(30,2,7),(33,2,8),(35,2,9),(37,2,10),(38,2,11),(36,2,21),(26,2,22),(31,2,23),(34,2,24),(39,2,25),(27,2,26),(32,2,27),(40,2,34),(28,2,35); +/*!40000 ALTER TABLE `tenant_menus` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `tenants` +-- + +DROP TABLE IF EXISTS `tenants`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `tenants` ( + `id` int NOT NULL AUTO_INCREMENT, + `name` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, + `code` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, + `domain` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `description` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `is_super` int NOT NULL DEFAULT '0', + `valid_state` int NOT NULL DEFAULT '1', + `creator` int DEFAULT NULL, + `modifier` int DEFAULT NULL, + `create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `modify_time` datetime(3) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `tenants_code_key` (`code`), + UNIQUE KEY `tenants_domain_key` (`domain`), + KEY `tenants_creator_fkey` (`creator`), + KEY `tenants_modifier_fkey` (`modifier`), + CONSTRAINT `tenants_creator_fkey` FOREIGN KEY (`creator`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `tenants_modifier_fkey` FOREIGN KEY (`modifier`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `tenants` +-- + +LOCK TABLES `tenants` WRITE; +/*!40000 ALTER TABLE `tenants` DISABLE KEYS */; +INSERT INTO `tenants` VALUES (1,'超级租户','super','super','系统超级租户,拥有所有权限',1,1,NULL,NULL,'2026-01-18 02:00:23.863','2026-01-18 02:00:23.863'),(2,'香港小学','school1',NULL,NULL,0,1,NULL,NULL,'2026-01-18 02:03:25.302','2026-01-18 02:03:25.302'); +/*!40000 ALTER TABLE `tenants` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `user_roles` +-- + +DROP TABLE IF EXISTS `user_roles`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `user_roles` ( + `id` int NOT NULL AUTO_INCREMENT, + `user_id` int NOT NULL, + `role_id` int NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `user_roles_user_id_role_id_key` (`user_id`,`role_id`), + KEY `user_roles_role_id_fkey` (`role_id`), + CONSTRAINT `user_roles_role_id_fkey` FOREIGN KEY (`role_id`) REFERENCES `roles` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `user_roles_user_id_fkey` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `user_roles` +-- + +LOCK TABLES `user_roles` WRITE; +/*!40000 ALTER TABLE `user_roles` DISABLE KEYS */; +INSERT INTO `user_roles` VALUES (1,1,1),(2,2,2); +/*!40000 ALTER TABLE `user_roles` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `users` +-- + +DROP TABLE IF EXISTS `users`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `users` ( + `id` int NOT NULL AUTO_INCREMENT, + `tenant_id` int NOT NULL, + `username` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, + `password` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, + `nickname` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL, + `email` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `phone` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `gender` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `avatar` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `organization` varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `status` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'enabled', + `valid_state` int NOT NULL DEFAULT '1', + `creator` int DEFAULT NULL, + `modifier` int DEFAULT NULL, + `create_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `modify_time` datetime(3) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `users_tenant_id_username_key` (`tenant_id`,`username`), + UNIQUE KEY `users_tenant_id_email_key` (`tenant_id`,`email`), + KEY `users_creator_fkey` (`creator`), + KEY `users_modifier_fkey` (`modifier`), + CONSTRAINT `users_creator_fkey` FOREIGN KEY (`creator`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `users_modifier_fkey` FOREIGN KEY (`modifier`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT `users_tenant_id_fkey` FOREIGN KEY (`tenant_id`) REFERENCES `tenants` (`id`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `users` +-- + +LOCK TABLES `users` WRITE; +/*!40000 ALTER TABLE `users` DISABLE KEYS */; +INSERT INTO `users` VALUES (1,1,'admin','$2b$10$yEs4YwTEZ9/uhTXFuvUbfu5bKkUmvvcfV3K7EtDukVYFo3BltjZya','超级管理员','admin@super.com',NULL,NULL,NULL,NULL,'enabled',1,NULL,NULL,'2026-01-18 02:00:23.921','2026-01-18 02:00:40.895'),(2,2,'admin','$2b$10$7ppuHA7QhrqaBctS2C6Q2.GNvZtU3glDcLMUNFIY3NNYAqKCztLu6','管理员',NULL,NULL,NULL,NULL,NULL,'enabled',1,NULL,NULL,'2026-01-18 02:03:25.756','2026-01-18 02:03:25.756'); +/*!40000 ALTER TABLE `users` ENABLE KEYS */; +UNLOCK TABLES; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; + +-- Dump completed on 2026-01-18 11:19:37 diff --git a/backend/src/app.module.ts b/backend/src/app.module.ts index 0a4bf9a..d5739e9 100644 --- a/backend/src/app.module.ts +++ b/backend/src/app.module.ts @@ -28,11 +28,10 @@ import { HttpExceptionFilter } from './common/filters/http-exception.filter'; imports: [ ConfigModule.forRoot({ isGlobal: true, - // envFilePath 指定配置文件路径 - // 如果需要后备文件,可以取消下面的注释,但要注意 .env 会覆盖 .development.env 的值 + // envFilePath 数组中第一个文件优先级最高 envFilePath: [ - '.env', - `.env.${process.env.NODE_ENV || 'development'}`, // 优先加载 + `.env.${process.env.NODE_ENV || 'development'}`, // 优先加载环境特定配置 + '.env', // 通用配置作为后备 ], }), PrismaModule, diff --git a/backend/src/contests/contests/contests.service.ts b/backend/src/contests/contests/contests.service.ts index 1466668..b037ba0 100644 --- a/backend/src/contests/contests/contests.service.ts +++ b/backend/src/contests/contests/contests.service.ts @@ -375,7 +375,7 @@ export class ContestsService { }, }, }); - contestIds = [...new Set(teacherRecords.map((r) => r.registration.contestId as number))]; + contestIds = Array.from(new Set(teacherRecords.map((r) => r.registration.contestId as number))); } else { // 学生/默认:查询报名的赛事 const registrationWhere: any = { diff --git a/backend/src/contests/results/results.service.ts b/backend/src/contests/results/results.service.ts index 0ef0c21..67abf37 100644 --- a/backend/src/contests/results/results.service.ts +++ b/backend/src/contests/results/results.service.ts @@ -59,7 +59,7 @@ export class ResultsService { validState: 1, }, }); - const judgeWeights = new Map( + const judgeWeights = new Map( judges.map((j) => [j.judgeId, Number(j.weight || 1)]), ); diff --git a/backend/src/contests/reviews/reviews.service.ts b/backend/src/contests/reviews/reviews.service.ts index b483590..0ddbae4 100644 --- a/backend/src/contests/reviews/reviews.service.ts +++ b/backend/src/contests/reviews/reviews.service.ts @@ -608,7 +608,7 @@ export class ReviewsService { }, }); - const judgeWeights = new Map( + const judgeWeights = new Map( judges.map((j) => [j.judgeId, Number(j.weight || 1)]), ); diff --git a/backend/src/main.ts b/backend/src/main.ts index e00ceb8..6dadc5a 100644 --- a/backend/src/main.ts +++ b/backend/src/main.ts @@ -24,10 +24,8 @@ async function bootstrap() { }), ); - // 验证环境配置加载 const configService = app.get(ConfigService); - - const port = configService.get('PORT') || process.env.PORT || 3001; + const port = configService.get('PORT') || 3001; await app.listen(port); console.log(`Application is running on: http://localhost:${port}`); } diff --git a/docs/backend-deployment.md b/docs/backend-deployment.md new file mode 100644 index 0000000..ef40cdf --- /dev/null +++ b/docs/backend-deployment.md @@ -0,0 +1,250 @@ +# 后端部署文档 + +## 一、本地打包 + +### 1. 环境准备 + +```bash +cd backend + +# 删除 pnpm 的 node_modules(避免软链接问题) +rm -rf node_modules + +# 用 npm 安装依赖 +npm install + +# 构建项目 +pnpm build +``` + +### 2. 打包命令 + +```bash +# 测试环境 +bash scripts/compress.sh --env test --version 1.0.0 -n + +# 生产环境 +bash scripts/compress.sh --env production --version 1.0.0 -n +``` + +生成文件:`competition-management-service-{env}-{version}.tgz` + +### 3. 打包注意事项 + +| 问题 | 原因 | 解决方案 | +|------|------|---------| +| 软链接失效 | pnpm 使用软链接管理依赖 | 打包前用 `npm install` 替代 `pnpm install` | +| logs 模块缺失 | 打包脚本排除了 `logs` 目录 | 修改 `compress.sh` 中 `"logs"` 为 `"./logs"` | +| uuid 版本问题 | uuid v9+ 是 ESM 模块 | 安装 `uuid@8.3.2` | + +--- + +## 二、服务器部署 + +### 1. 上传并解压 + +```bash +# 本地上传 +scp competition-management-service-test-1.0.0.tgz root@服务器IP:/data/web-servers/ + +# 服务器解压 +cd /data/web-servers +tar -xzf competition-management-service-test-1.0.0.tgz +cd competition-management-service +``` + +### 2. 配置环境变量 + +```bash +vim .env +``` + +修改数据库连接: +```env +DATABASE_URL="mysql://用户名:密码@数据库地址:端口/数据库名" +``` + +示例(腾讯云数据库): +```env +DATABASE_URL="mysql://root:password@gz-cdb-xxx.sql.tencentcdb.com:20704/db_competition_management" +``` + +### 3. 生成 Prisma Client + +```bash +# 如果遇到 SSL 证书问题 +export NODE_TLS_REJECT_UNAUTHORIZED=0 + +npx prisma generate +``` + +### 4. 创建数据库表 + +```bash +npx prisma db push +``` + +### 5. 启动服务 + +```bash +# 使用 PM2 启动 +pm2 start dist/src/main.js --name competition-api-test + +# 保存进程列表 +pm2 save + +# 设置开机自启 +pm2 startup +``` + +### 6. 验证服务 + +```bash +# 查看状态 +pm2 status + +# 查看日志 +pm2 logs competition-api-test + +# 测试接口 +curl -X POST http://localhost:3234/api/auth/login \ + -H "Content-Type: application/json" \ + -d '{"username":"admin","password":"123456"}' +``` + +--- + +## 三、常见问题 + +### 1. `prisma generate` 报 SSL 证书错误 + +``` +Error: request to https://binaries.prisma.sh/... failed, reason: unable to get local issuer certificate +``` + +**解决**: +```bash +export NODE_TLS_REJECT_UNAUTHORIZED=0 +npx prisma generate +``` + +### 2. `pm2: command not found` + +**原因**:`/usr/local/bin` 不在 PATH 中 + +**解决**: +```bash +export PATH=$PATH:/usr/local/bin +echo 'export PATH=$PATH:/usr/local/bin' >> ~/.bashrc +source ~/.bashrc +``` + +### 3. `MODULE_NOT_FOUND: ./logs/logs.module` + +**原因**:打包脚本排除了 `logs` 目录 + +**解决**:修改 `compress.sh` 第 93 行: +```bash +# 修改前 +"logs" +# 修改后 +"./logs" +``` + +### 4. `ERR_REQUIRE_ESM: uuid` + +**原因**:uuid v9+ 是 ESM 模块,不支持 CommonJS + +**解决**: +```bash +npm install uuid@8.3.2 +``` + +### 5. 数据库认证失败 + +``` +PrismaClientInitializationError: Authentication failed against database server +``` + +**解决**:检查 `.env` 中 `DATABASE_URL` 的用户名、密码、地址是否正确 + +### 6. 服务启动后无法访问 + +**原因**: +- 防火墙未开放端口 +- 云服务器安全组未配置 + +**解决**: +```bash +# 开放防火墙端口 +firewall-cmd --permanent --add-port=3234/tcp +firewall-cmd --reload +``` + +腾讯云控制台 → 安全组 → 添加入站规则(TCP 3234) + +--- + +## 四、PM2 常用命令 + +```bash +pm2 start dist/src/main.js --name app-name # 启动 +pm2 stop app-name # 停止 +pm2 restart app-name # 重启 +pm2 delete app-name # 删除 +pm2 status # 查看状态 +pm2 logs app-name # 查看日志 +pm2 logs app-name --lines 100 # 查看最近100行日志 +pm2 save # 保存进程列表 +pm2 startup # 设置开机自启 +``` + +--- + +## 五、数据初始化 + +### 方式1:本地初始化后导出导入 + +**本地操作**: +```bash +cd backend +pnpm init:super-tenant +pnpm init:admin +pnpm init:menus +pnpm init:roles:all + +# 导出数据 +mysqldump -u root db_competition_management > init_data.sql +``` + +**导入到云数据库**(使用 DBeaver): +1. 连接腾讯云数据库 +2. 执行 `SET FOREIGN_KEY_CHECKS = 0;` +3. 执行 SQL 文件 +4. 执行 `SET FOREIGN_KEY_CHECKS = 1;` + +### 方式2:DBeaver 数据传输 + +1. 连接本地数据库和云数据库 +2. 选中本地数据库所有表 +3. 右键 → 导出数据 → 数据库表 +4. 选择云数据库作为目标 +5. 执行传输 + +--- + +## 六、目录结构 + +``` +/data/web-servers/competition-management-service/ +├── dist/ # 编译后的代码 +│ └── src/ +│ └── main.js # 入口文件 +├── node_modules/ # 依赖 +├── prisma/ # Prisma schema +├── .env # 环境配置 +├── .env.test # 测试环境配置 +├── .env.production # 生产环境配置 +├── ecosystem.config.js # PM2 配置 +└── package.json +``` diff --git a/docs/frontend-deployment.md b/docs/frontend-deployment.md new file mode 100644 index 0000000..8e598bc --- /dev/null +++ b/docs/frontend-deployment.md @@ -0,0 +1,402 @@ +# 前端部署文档 + +## 一、环境配置 + +### 1.1 环境文件 + +项目支持多环境配置: + +- `.env.development` - 本地开发环境 +- `.env.test` - 测试环境 +- `.env.production` - 生产环境 + +**测试环境配置 (.env.test):** +```env +# 测试环境 +VITE_BASE_URL=/web-test/ +VITE_API_BASE_URL=/api-test +``` + +**生产环境配置 (.env.production):** +```env +# 生产环境 +VITE_BASE_URL=/web/ +VITE_API_BASE_URL=/api +``` + +### 1.2 Vite 配置 + +`vite.config.ts` 根据环境设置 base 路径: + +```typescript +import { defineConfig } from "vite" +import vue from "@vitejs/plugin-vue" +import { resolve } from "path" + +// 根据环境设置 base 路径 +const getBase = (mode: string) => { + switch (mode) { + case "test": + return "/web-test/" + case "production": + return "/web/" + default: + return "/" + } +} + +export default defineConfig(({ mode }) => { + return { + base: getBase(mode), + plugins: [vue()], + resolve: { + alias: { + "@": resolve(__dirname, "src"), + }, + }, + server: { + port: 3000, + proxy: { + "/api": { + target: "http://localhost:3234", + changeOrigin: true, + }, + }, + }, + } +}) +``` + +### 1.3 路由配置 + +`src/router/index.ts` 需要配置 base 路径: + +```typescript +const router = createRouter({ + history: createWebHistory(import.meta.env.BASE_URL), + routes: baseRoutes, +}) +``` + +--- + +## 二、构建打包 + +### 2.1 构建命令 + +```bash +# 测试环境构建 +pnpm build:test + +# 生产环境构建 +pnpm build:prod +``` + +### 2.2 压缩打包 + +```bash +# 测试环境压缩 +pnpm compress:test + +# 生产环境压缩 +pnpm compress:prod +``` + +压缩后文件: +- 测试环境:`competition-web-test-v1.0.0.tgz` +- 生产环境:`competition-web-production-v1.0.0.tgz` + +--- + +## 三、服务器部署 + +### 3.1 服务器信息 + +| 环境 | Nginx 服务器 | 后端服务器 | +|------|-------------|-----------| +| 测试 | 106.52.220.176 | 119.29.229.174:3234 | +| 生产 | 106.52.220.176 | 待定 | + +域名:`cmp-3d.linkseaai.com` + +### 3.2 部署步骤 + +**1. 上传压缩包** +```bash +scp competition-web-test-v1.0.0.tgz root@106.52.220.176:/home/ +``` + +**2. 登录服务器** +```bash +ssh root@106.52.220.176 +``` + +**3. 解压文件** +```bash +# 创建目录(首次部署) +mkdir -p /data/apps/cmp-3d/web-test +mkdir -p /data/apps/cmp-3d/web + +# 清空旧文件并解压 +rm -rf /data/apps/cmp-3d/web-test/* +cd /home +tar -xzf competition-web-test-v1.0.0.tgz -C /data/apps/cmp-3d/web-test +``` + +**4. 配置 Nginx** + +配置文件路径:`/usr/local/nginx/conf/conf.d/cmp-3d.conf` + +```nginx +# ========== 比赛管理系统 - cmp-3d.linkseaai.com ========== + +server { + listen 443 ssl; + server_name cmp-3d.linkseaai.com; + include /usr/local/nginx/conf/conf.d/linkseaai.ssl.conf; + root /data/apps/cmp-3d/; + include /usr/local/nginx/conf/conf.d/error.conf; + include /usr/local/nginx/conf/conf.d/static.conf; + + # ========== 超时配置 ========== + keepalive_timeout 300s; + send_timeout 180s; + proxy_connect_timeout 10s; + proxy_send_timeout 10s; + proxy_read_timeout 300s; + + # ========== 测试环境 - 前端 ========== + location /web-test/ { + root /data/apps/cmp-3d/; + index index.html index.htm; + try_files $uri $uri/ /web-test/index.html; + } + + # ========== 测试环境 - API 代理 ========== + location /api-test/ { + proxy_redirect off; + proxy_pass http://119.29.229.174:3234/api/; + proxy_http_version 1.1; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } + + # ========== 生产环境 - 前端 ========== + location /web/ { + root /data/apps/cmp-3d/; + index index.html index.htm; + try_files $uri $uri/ /web/index.html; + } + + # ========== 生产环境 - API 代理 ========== + location /api/ { + proxy_redirect off; + proxy_pass http://119.29.229.174:3234/api/; + proxy_http_version 1.1; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } +} +``` + +**5. 在 nginx.conf 中添加 include** + +编辑 `/usr/local/nginx/conf/nginx.conf`,在 `http {}` 块中添加: +```nginx +include ./conf.d/cmp-3d.conf; +``` + +**6. 重载 Nginx** +```bash +/usr/local/nginx/sbin/nginx -t +/usr/local/nginx/sbin/nginx -s reload +``` + +### 3.3 访问地址 + +| 环境 | URL | +|------|-----| +| 测试 | https://cmp-3d.linkseaai.com/web-test/super/login | +| 生产 | https://cmp-3d.linkseaai.com/web/super/login | + +--- + +## 四、遇到的问题及解决方案 + +### 4.1 vite.config.js 覆盖问题 + +**问题描述:** +项目中同时存在 `vite.config.ts` 和 `vite.config.js`,导致 TypeScript 配置文件被 JavaScript 文件覆盖,`base` 配置不生效。 + +**表现:** +打包后的 `index.html` 中资源路径是 `/assets/...` 而不是 `/web-test/assets/...`。 + +**解决方案:** +删除 `vite.config.js` 和 `vite.config.d.ts`,只保留 `vite.config.ts`。 + +```bash +rm vite.config.js vite.config.d.ts +``` + +### 4.2 域名重定向到 linkseaaiglobal.com + +**问题描述:** +访问 `https://cmp-3d.linkseaai.com/web-test/` 被重定向到 `https://linkseaaiglobal.com/`。 + +**原因:** +`nginx.conf` 中没有 include `cmp-3d.conf` 配置文件。 + +**解决方案:** +在 `/usr/local/nginx/conf/nginx.conf` 的 `http {}` 块中添加: +```nginx +include ./conf.d/cmp-3d.conf; +``` + +### 4.3 租户编码获取错误 + +**问题描述:** +登录时提示"租户不存在",租户编码被识别为 `web-test` 而不是 `super`。 + +**原因:** +`src/utils/auth.ts` 中的 `getTenantCodeFromUrl()` 函数直接从 URL 第一部分提取租户编码,没有考虑 base 路径。 + +URL `/web-test/super/login` 被解析为租户编码 `web-test`。 + +**解决方案:** +修改 `getTenantCodeFromUrl()` 函数,去掉 base 路径后再提取租户编码: + +```typescript +function getTenantCodeFromUrl(): string | null { + let path = window.location.pathname; + + // 去掉 base 路径前缀(如 /web-test/ 或 /web/) + const base = import.meta.env.BASE_URL || "/"; + if (base !== "/" && path.startsWith(base)) { + path = path.slice(base.length - 1); // 保留开头的 / + } + + const match = path.match(/^\/([^/]+)/); + return match ? match[1] : null; +} +``` + +同时修改 `setToken()` 和 `removeToken()` 函数,Cookie 路径也需要包含 base 路径。 + +### 4.4 Vue Router base 路径问题 + +**问题描述:** +在 URL 中添加租户编码后,回车会自动去掉租户编码部分。 + +**原因:** +`createWebHistory()` 没有传入 base 路径。 + +**解决方案:** +修改 `src/router/index.ts`: + +```typescript +const router = createRouter({ + history: createWebHistory(import.meta.env.BASE_URL), + routes: baseRoutes, +}) +``` + +### 4.5 API 路径 404 错误 + +**问题描述:** +登录接口返回 `Cannot POST /auth/login`。 + +**原因:** +Nginx 代理配置中,`/api-test/` 被代理到 `http://119.29.229.174:3234/`,但后端路由前缀是 `/api`。 + +请求 `/api-test/auth/login` 被代理到 `http://119.29.229.174:3234/auth/login`,而正确应该是 `/api/auth/login`。 + +**解决方案:** +修改 Nginx 配置,将 `/api-test/` 代理到 `/api/`: + +```nginx +location /api-test/ { + proxy_pass http://119.29.229.174:3234/api/; + # ... +} +``` + +### 4.6 3D 建模实验室链接 404 + +**问题描述:** +点击 3D 建模实验室菜单,打开的 URL 是 `https://cmp-3d.linkseaai.com/school1/workbench/3d-lab`,缺少 `/web-test/` 前缀。 + +**原因:** +`src/layouts/BasicLayout.vue` 中生成 URL 时使用 `window.location.origin` 直接拼接路径,没有包含 base 路径。 + +**解决方案:** +修改 BasicLayout.vue 中的 URL 生成逻辑: + +```typescript +const base = import.meta.env.BASE_URL || "/" +const basePath = base.endsWith("/") ? base.slice(0, -1) : base +const fullUrl = `${window.location.origin}${basePath}/${tenantCode}/workbench/3d-lab` +window.open(fullUrl, "_blank") +``` + +--- + +## 五、常用命令 + +### Nginx 命令 +```bash +# Nginx 路径(编译安装) +/usr/local/nginx/sbin/nginx + +# 测试配置 +/usr/local/nginx/sbin/nginx -t + +# 重载配置 +/usr/local/nginx/sbin/nginx -s reload + +# 查看完整配置 +/usr/local/nginx/sbin/nginx -T + +# 查看配置文件 +cat /usr/local/nginx/conf/nginx.conf +cat /usr/local/nginx/conf/conf.d/cmp-3d.conf +``` + +### 部署快捷命令 +```bash +# 一键部署测试环境 +rm -rf /data/apps/cmp-3d/web-test/* && \ +cd /home && \ +tar -xzf competition-web-test-v1.0.0.tgz -C /data/apps/cmp-3d/web-test +``` + +--- + +## 六、目录结构 + +``` +/data/apps/cmp-3d/ +├── web-test/ # 测试环境前端 +│ ├── index.html +│ └── assets/ +└── web/ # 生产环境前端 + ├── index.html + └── assets/ +``` + +--- + +## 七、注意事项 + +1. **base 路径一致性**:前端 `vite.config.ts`、`.env` 文件、Nginx 配置中的路径必须一致。 + +2. **API 代理路径**:Nginx 代理到后端时,注意后端的路由前缀是 `/api`。 + +3. **Cookie 路径**:登录后的 Token 存储在 Cookie 中,路径需要包含 base 路径。 + +4. **清除缓存**:部署后如果有问题,先清除浏览器缓存或使用无痕模式测试。 + +5. **Nginx include**:新增配置文件后,需要在 `nginx.conf` 中添加 include 语句。 diff --git a/frontend/.env.development b/frontend/.env.development new file mode 100644 index 0000000..02f1c27 --- /dev/null +++ b/frontend/.env.development @@ -0,0 +1,2 @@ +# 开发环境 +VITE_API_BASE_URL=/api diff --git a/frontend/.env.production b/frontend/.env.production new file mode 100644 index 0000000..0de5427 --- /dev/null +++ b/frontend/.env.production @@ -0,0 +1,5 @@ +# 生产环境 +VITE_API_BASE_URL=/api +# 如果后端部署在不同域名,可以改成完整地址: +# VITE_API_BASE_URL=https://api.your-domain.com + diff --git a/frontend/.env.test b/frontend/.env.test new file mode 100644 index 0000000..8996df4 --- /dev/null +++ b/frontend/.env.test @@ -0,0 +1,3 @@ +# 测试环境 +VITE_BASE_URL=/web-test/ +VITE_API_BASE_URL=/api-test diff --git a/frontend/cmp-3d.conf b/frontend/cmp-3d.conf new file mode 100644 index 0000000..d0a272d --- /dev/null +++ b/frontend/cmp-3d.conf @@ -0,0 +1,53 @@ +# ========== 比赛管理系统 - cmp-3d.linkseaai.com ========== + +server { + listen 443 ssl; + server_name cmp-3d.linkseaai.com; + include /usr/local/nginx/conf/conf.d/linkseaai.ssl.conf; + root /data/apps/cmp-3d/; + include /usr/local/nginx/conf/conf.d/error.conf; + include /usr/local/nginx/conf/conf.d/static.conf; + + # ========== 超时配置 ========== + keepalive_timeout 300s; + send_timeout 180s; + proxy_connect_timeout 10s; + proxy_send_timeout 10s; + proxy_read_timeout 300s; + + # ========== 测试环境 - 前端 ========== + location /web-test/ { + root /data/apps/cmp-3d/; + index index.html index.htm; + try_files $uri $uri/ /web-test/index.html; + } + + # ========== 测试环境 - API 代理 ========== + location /api-test/ { + proxy_redirect off; + proxy_pass http://119.29.229.174:3234/; + proxy_http_version 1.1; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } + + # ========== 生产环境 - 前端 ========== + location /web/ { + root /data/apps/cmp-3d/; + index index.html index.htm; + try_files $uri $uri/ /web/index.html; + } + + # ========== 生产环境 - API 代理 ========== + location /api/ { + proxy_redirect off; + proxy_pass http://119.29.229.174:3234/; + proxy_http_version 1.1; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } +} diff --git a/frontend/competition-web-test-v1.0.0.tgz b/frontend/competition-web-test-v1.0.0.tgz new file mode 100644 index 0000000..9582c83 Binary files /dev/null and b/frontend/competition-web-test-v1.0.0.tgz differ diff --git a/frontend/package.json b/frontend/package.json index 732eef9..6bb3db2 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -3,8 +3,12 @@ "version": "1.0.0", "type": "module", "scripts": { + "compress:test": "node scripts/compress.cjs test", + "compress:prod": "node scripts/compress.cjs production", "dev": "vite", - "build": "vue-tsc && vite build", + "build": "vue-tsc -b && vite build", + "build:test": "vite build --mode test", + "build:prod": "vite build --mode production", "preview": "vite preview", "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore" }, @@ -35,6 +39,6 @@ "tailwindcss": "^3.4.1", "typescript": "^5.4.3", "vite": "^5.1.6", - "vue-tsc": "^1.8.27" + "vue-tsc": "^3.2.2" } } diff --git a/frontend/scripts/compress.cjs b/frontend/scripts/compress.cjs new file mode 100644 index 0000000..e3d98bf --- /dev/null +++ b/frontend/scripts/compress.cjs @@ -0,0 +1,116 @@ +const { execSync } = require("child_process") +const path = require("path") +const fs = require("fs") + +/** + * 压缩前端打包文件 + * 压缩包放在根目录下,文件名格式: competition-web-{env}-v{version}.tgz + * + * 用法: + * node scripts/compress.cjs test - 测试环境 + * node scripts/compress.cjs production - 生产环境 + */ +function compressFrontend() { + const rootDir = path.join(__dirname, "..") + const sourceDir = path.join(rootDir, "dist") + const outputDir = rootDir + + // 获取环境参数 + const env = process.argv[2] + if (!env || !["test", "production"].includes(env)) { + console.error("❌ 错误: 请指定环境参数") + console.error(" 用法: node scripts/compress.cjs ") + console.error(" 示例: node scripts/compress.cjs test") + console.error(" 示例: node scripts/compress.cjs production") + process.exit(1) + } + + // 从 package.json 读取版本号 + const packageJsonPath = path.join(rootDir, "package.json") + let version = "1.0.0" + try { + const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf-8")) + version = packageJson.version || "1.0.0" + } catch (error) { + console.warn(`⚠️ 无法读取 package.json 版本号,使用默认版本: ${version}`) + } + + // 检查源目录是否存在 + if (!fs.existsSync(sourceDir)) { + console.error("❌ 错误: 前端打包文件不存在") + console.error(` 路径: ${sourceDir}`) + console.error( + ` 请先运行 pnpm build:${env === "test" ? "test" : ""} 构建前端项目`, + ) + process.exit(1) + } + + // 删除之前的所有压缩包 + console.log("🧹 清理旧的压缩包...\n") + try { + const files = fs.readdirSync(outputDir) + const oldZipFiles = files.filter( + (file) => file.startsWith("competition-web-") && file.endsWith(".tgz"), + ) + + if (oldZipFiles.length > 0) { + oldZipFiles.forEach((file) => { + const filePath = path.join(outputDir, file) + try { + fs.unlinkSync(filePath) + console.log(` ✅ 已删除: ${file}`) + } catch (error) { + console.warn(` ⚠️ 删除失败: ${file} - ${error.message}`) + } + }) + console.log("") + } else { + console.log(" ℹ️ 没有找到旧的压缩包\n") + } + } catch (error) { + console.warn(` ⚠️ 清理旧压缩包时出错: ${error.message}\n`) + } + + // 生成文件名: competition-web-{env}-v{version}.tgz + const zipFileName = `competition-web-${env}-v${version}.tgz` + const zipFilePath = path.join(outputDir, zipFileName) + + console.log("📦 开始压缩前端打包文件...\n") + console.log(` 环境: ${env}`) + console.log(` 版本: v${version}`) + console.log(` 源目录: ${sourceDir}`) + console.log(` 输出文件: ${zipFilePath}\n`) + + try { + // 使用相对路径,避免 Windows tar 路径问题 + const tarCommand = `tar -czf "${zipFileName}" -C dist .` + + execSync(tarCommand, { + cwd: rootDir, + stdio: "inherit", + shell: true, + env: { ...process.env }, + }) + + // 检查文件是否创建成功 + if (fs.existsSync(zipFilePath)) { + const stats = fs.statSync(zipFilePath) + const fileSizeMB = (stats.size / (1024 * 1024)).toFixed(2) + console.log(`\n✅ 压缩完成!`) + console.log(` 文件: ${zipFileName}`) + console.log(` 大小: ${fileSizeMB} MB`) + console.log(` 路径: ${zipFilePath}`) + } else { + throw new Error("压缩文件未生成") + } + } catch (error) { + console.error("\n❌ 压缩失败:", error.message) + console.error("\n提示:") + console.error(" 1. 确保已安装tar命令 (Windows 10+内置支持)") + console.error(" 2. 确保有足够的磁盘空间") + console.error(" 3. 确保输出目录有写入权限") + process.exit(1) + } +} + +compressFrontend() diff --git a/frontend/src/api/ai-3d.ts b/frontend/src/api/ai-3d.ts index 2f16c14..37c1052 100644 --- a/frontend/src/api/ai-3d.ts +++ b/frontend/src/api/ai-3d.ts @@ -1,5 +1,5 @@ import request from "@/utils/request"; -import type { PaginationParams, PaginationResponse } from "@/types/api"; +import type { PaginationParams } from "@/types/api"; // ==================== AI 3D 任务相关类型 ==================== diff --git a/frontend/src/api/auth.ts b/frontend/src/api/auth.ts index 29376e2..ba52aa1 100644 --- a/frontend/src/api/auth.ts +++ b/frontend/src/api/auth.ts @@ -4,7 +4,7 @@ import type { LoginForm, LoginResponse, User } from "@/types/auth"; export const authApi = { login: async (data: LoginForm): Promise => { const response = await request.post("/auth/login", data); - return response as LoginResponse; + return response as unknown as LoginResponse; }, logout: async (): Promise => { @@ -13,11 +13,11 @@ export const authApi = { getUserInfo: async (): Promise => { const response = await request.get("/auth/user-info"); - return response as User; + return response as unknown as User; }, refreshToken: async (): Promise<{ token: string }> => { const response = await request.post("/auth/refresh-token"); - return response as { token: string }; + return response as unknown as { token: string }; }, }; diff --git a/frontend/src/api/contests.ts b/frontend/src/api/contests.ts index ad5349f..98f9df9 100644 --- a/frontend/src/api/contests.ts +++ b/frontend/src/api/contests.ts @@ -209,7 +209,6 @@ export interface ContestRegistration { }; }; }; - registrant?: number; teachers?: Array<{ id: number; userId: number; diff --git a/frontend/src/layouts/BasicLayout.vue b/frontend/src/layouts/BasicLayout.vue index b8a48a9..bb1e6e0 100644 --- a/frontend/src/layouts/BasicLayout.vue +++ b/frontend/src/layouts/BasicLayout.vue @@ -185,7 +185,9 @@ const handleMenuClick = ({ key }: { key: string }) => { if (is3DLab || is3DLabByPath) { // 打开3D建模实验室页面(新窗口,路由配置了 hideSidebar 会自动隐藏侧边栏) console.log("检测到3D建模实验室,打开新窗口") - const fullUrl = `${window.location.origin}/${tenantCode}/workbench/3d-lab` + const base = import.meta.env.BASE_URL || "/" + const basePath = base.endsWith("/") ? base.slice(0, -1) : base + const fullUrl = `${window.location.origin}${basePath}/${tenantCode}/workbench/3d-lab` window.open(fullUrl, "_blank") return } diff --git a/frontend/src/router/index.ts b/frontend/src/router/index.ts index e6bf097..0e025a0 100644 --- a/frontend/src/router/index.ts +++ b/frontend/src/router/index.ts @@ -249,7 +249,7 @@ const baseRoutes: RouteRecordRaw[] = [ ] const router = createRouter({ - history: createWebHistory(), + history: createWebHistory(import.meta.env.BASE_URL), routes: baseRoutes, }) diff --git a/frontend/src/utils/auth.ts b/frontend/src/utils/auth.ts index b15f729..d563047 100644 --- a/frontend/src/utils/auth.ts +++ b/frontend/src/utils/auth.ts @@ -4,7 +4,14 @@ const TOKEN_KEY = "token"; * 从当前 URL 路径中提取租户编码 */ function getTenantCodeFromUrl(): string | null { - const path = window.location.pathname; + let path = window.location.pathname; + + // 去掉 base 路径前缀(如 /web-test/ 或 /web/) + const base = import.meta.env.BASE_URL || "/"; + if (base !== "/" && path.startsWith(base)) { + path = path.slice(base.length - 1); // 保留开头的 / + } + const match = path.match(/^\/([^/]+)/); return match ? match[1] : null; } @@ -74,7 +81,10 @@ export const setToken = (token: string, tenantCode?: string): void => { // 如果提供了租户编码,使用租户编码作为 path // 否则从 URL 获取或使用默认路径 const urlTenantCode = tenantCode || getTenantCodeFromUrl(); - const path = urlTenantCode ? `/${urlTenantCode}` : "/"; + const base = import.meta.env.BASE_URL || "/"; + // 组合 base 路径和租户编码 + const basePath = base.endsWith("/") ? base.slice(0, -1) : base; + const path = urlTenantCode ? `${basePath}/${urlTenantCode}` : basePath || "/"; // 设置 cookie,过期时间设置为 7 天 const expires = 7 * 24 * 60 * 60; // 7 天(秒) @@ -82,17 +92,20 @@ export const setToken = (token: string, tenantCode?: string): void => { }; export const removeToken = (tenantCode?: string): void => { + const base = import.meta.env.BASE_URL || "/"; + const basePath = base.endsWith("/") ? base.slice(0, -1) : base; + // 如果提供了租户编码,删除该路径下的 cookie if (tenantCode) { - removeCookie(TOKEN_KEY, `/${tenantCode}`); + removeCookie(TOKEN_KEY, `${basePath}/${tenantCode}`); } else { // 否则从 URL 获取租户编码并删除对应路径下的 cookie const urlTenantCode = getTenantCodeFromUrl(); if (urlTenantCode) { - removeCookie(TOKEN_KEY, `/${urlTenantCode}`); + removeCookie(TOKEN_KEY, `${basePath}/${urlTenantCode}`); } // 也删除根路径下的 cookie(如果有) - removeCookie(TOKEN_KEY, "/"); + removeCookie(TOKEN_KEY, basePath || "/"); } }; diff --git a/frontend/src/utils/request.ts b/frontend/src/utils/request.ts index 952c406..55c6c72 100644 --- a/frontend/src/utils/request.ts +++ b/frontend/src/utils/request.ts @@ -9,7 +9,7 @@ import { useAuthStore } from "@/stores/auth" import router from "@/router" const service: AxiosInstance = axios.create({ - baseURL: "/api", + baseURL: import.meta.env.VITE_API_BASE_URL || "/api", timeout: 30000, }) diff --git a/frontend/tsconfig.node.tsbuildinfo b/frontend/tsconfig.node.tsbuildinfo new file mode 100644 index 0000000..99239ea --- /dev/null +++ b/frontend/tsconfig.node.tsbuildinfo @@ -0,0 +1 @@ +{"fileNames":["../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es5.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.dom.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.webworker.importscripts.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.scripthost.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.disposable.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.float16.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.d.ts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","./node_modules/@types/node/compatibility/iterators.d.ts","./node_modules/@types/node/globals.typedarray.d.ts","./node_modules/@types/node/buffer.buffer.d.ts","./node_modules/@types/node/globals.d.ts","./node_modules/@types/node/web-globals/abortcontroller.d.ts","./node_modules/@types/node/web-globals/blob.d.ts","./node_modules/@types/node/web-globals/console.d.ts","./node_modules/@types/node/web-globals/crypto.d.ts","./node_modules/@types/node/web-globals/domexception.d.ts","./node_modules/@types/node/web-globals/encoding.d.ts","./node_modules/@types/node/web-globals/events.d.ts","../node_modules/.pnpm/buffer@5.7.1/node_modules/buffer/index.d.ts","./node_modules/undici-types/utility.d.ts","./node_modules/undici-types/header.d.ts","./node_modules/undici-types/readable.d.ts","./node_modules/undici-types/fetch.d.ts","./node_modules/undici-types/formdata.d.ts","./node_modules/undici-types/connector.d.ts","./node_modules/undici-types/client-stats.d.ts","./node_modules/undici-types/client.d.ts","./node_modules/undici-types/errors.d.ts","./node_modules/undici-types/dispatcher.d.ts","./node_modules/undici-types/global-dispatcher.d.ts","./node_modules/undici-types/global-origin.d.ts","./node_modules/undici-types/pool-stats.d.ts","./node_modules/undici-types/pool.d.ts","./node_modules/undici-types/handlers.d.ts","./node_modules/undici-types/balanced-pool.d.ts","./node_modules/undici-types/h2c-client.d.ts","./node_modules/undici-types/agent.d.ts","./node_modules/undici-types/mock-interceptor.d.ts","./node_modules/undici-types/mock-call-history.d.ts","./node_modules/undici-types/mock-agent.d.ts","./node_modules/undici-types/mock-client.d.ts","./node_modules/undici-types/mock-pool.d.ts","./node_modules/undici-types/snapshot-agent.d.ts","./node_modules/undici-types/mock-errors.d.ts","./node_modules/undici-types/proxy-agent.d.ts","./node_modules/undici-types/env-http-proxy-agent.d.ts","./node_modules/undici-types/retry-handler.d.ts","./node_modules/undici-types/retry-agent.d.ts","./node_modules/undici-types/api.d.ts","./node_modules/undici-types/cache-interceptor.d.ts","./node_modules/undici-types/interceptors.d.ts","./node_modules/undici-types/util.d.ts","./node_modules/undici-types/cookies.d.ts","./node_modules/undici-types/patch.d.ts","./node_modules/undici-types/websocket.d.ts","./node_modules/undici-types/eventsource.d.ts","./node_modules/undici-types/diagnostics-channel.d.ts","./node_modules/undici-types/content-type.d.ts","./node_modules/undici-types/cache.d.ts","./node_modules/undici-types/index.d.ts","./node_modules/@types/node/web-globals/fetch.d.ts","./node_modules/@types/node/web-globals/importmeta.d.ts","./node_modules/@types/node/web-globals/messaging.d.ts","./node_modules/@types/node/web-globals/navigator.d.ts","./node_modules/@types/node/web-globals/performance.d.ts","./node_modules/@types/node/web-globals/storage.d.ts","./node_modules/@types/node/web-globals/streams.d.ts","./node_modules/@types/node/web-globals/timers.d.ts","./node_modules/@types/node/web-globals/url.d.ts","./node_modules/@types/node/assert.d.ts","./node_modules/@types/node/assert/strict.d.ts","./node_modules/@types/node/async_hooks.d.ts","./node_modules/@types/node/buffer.d.ts","./node_modules/@types/node/child_process.d.ts","./node_modules/@types/node/cluster.d.ts","./node_modules/@types/node/console.d.ts","./node_modules/@types/node/constants.d.ts","./node_modules/@types/node/crypto.d.ts","./node_modules/@types/node/dgram.d.ts","./node_modules/@types/node/diagnostics_channel.d.ts","./node_modules/@types/node/dns.d.ts","./node_modules/@types/node/dns/promises.d.ts","./node_modules/@types/node/domain.d.ts","./node_modules/@types/node/events.d.ts","./node_modules/@types/node/fs.d.ts","./node_modules/@types/node/fs/promises.d.ts","./node_modules/@types/node/http.d.ts","./node_modules/@types/node/http2.d.ts","./node_modules/@types/node/https.d.ts","./node_modules/@types/node/inspector.d.ts","./node_modules/@types/node/inspector.generated.d.ts","./node_modules/@types/node/inspector/promises.d.ts","./node_modules/@types/node/module.d.ts","./node_modules/@types/node/net.d.ts","./node_modules/@types/node/os.d.ts","./node_modules/@types/node/path.d.ts","./node_modules/@types/node/path/posix.d.ts","./node_modules/@types/node/path/win32.d.ts","./node_modules/@types/node/perf_hooks.d.ts","./node_modules/@types/node/process.d.ts","./node_modules/@types/node/punycode.d.ts","./node_modules/@types/node/querystring.d.ts","./node_modules/@types/node/quic.d.ts","./node_modules/@types/node/readline.d.ts","./node_modules/@types/node/readline/promises.d.ts","./node_modules/@types/node/repl.d.ts","./node_modules/@types/node/sea.d.ts","./node_modules/@types/node/sqlite.d.ts","./node_modules/@types/node/stream.d.ts","./node_modules/@types/node/stream/consumers.d.ts","./node_modules/@types/node/stream/promises.d.ts","./node_modules/@types/node/stream/web.d.ts","./node_modules/@types/node/string_decoder.d.ts","./node_modules/@types/node/test.d.ts","./node_modules/@types/node/test/reporters.d.ts","./node_modules/@types/node/timers.d.ts","./node_modules/@types/node/timers/promises.d.ts","./node_modules/@types/node/tls.d.ts","./node_modules/@types/node/trace_events.d.ts","./node_modules/@types/node/tty.d.ts","./node_modules/@types/node/url.d.ts","./node_modules/@types/node/util.d.ts","./node_modules/@types/node/util/types.d.ts","./node_modules/@types/node/v8.d.ts","./node_modules/@types/node/vm.d.ts","./node_modules/@types/node/wasi.d.ts","./node_modules/@types/node/worker_threads.d.ts","./node_modules/@types/node/zlib.d.ts","./node_modules/@types/node/index.d.ts","../node_modules/.pnpm/@types+estree@1.0.8/node_modules/@types/estree/index.d.ts","../node_modules/.pnpm/rollup@4.53.3/node_modules/rollup/dist/rollup.d.ts","../node_modules/.pnpm/rollup@4.53.3/node_modules/rollup/dist/parseast.d.ts","../node_modules/.pnpm/vite@5.4.21_@types+node@20.19.25_sass@1.94.1_terser@5.44.1/node_modules/vite/types/hmrpayload.d.ts","../node_modules/.pnpm/vite@5.4.21_@types+node@20.19.25_sass@1.94.1_terser@5.44.1/node_modules/vite/types/customevent.d.ts","../node_modules/.pnpm/vite@5.4.21_@types+node@20.19.25_sass@1.94.1_terser@5.44.1/node_modules/vite/types/hot.d.ts","../node_modules/.pnpm/vite@5.4.21_@types+node@20.19.25_sass@1.94.1_terser@5.44.1/node_modules/vite/dist/node/types.d-agj9qkwt.d.ts","../node_modules/.pnpm/esbuild@0.21.5/node_modules/esbuild/lib/main.d.ts","../node_modules/.pnpm/source-map-js@1.2.1/node_modules/source-map-js/source-map.d.ts","../node_modules/.pnpm/postcss@8.5.6/node_modules/postcss/lib/previous-map.d.ts","../node_modules/.pnpm/postcss@8.5.6/node_modules/postcss/lib/input.d.ts","../node_modules/.pnpm/postcss@8.5.6/node_modules/postcss/lib/css-syntax-error.d.ts","../node_modules/.pnpm/postcss@8.5.6/node_modules/postcss/lib/declaration.d.ts","../node_modules/.pnpm/postcss@8.5.6/node_modules/postcss/lib/root.d.ts","../node_modules/.pnpm/postcss@8.5.6/node_modules/postcss/lib/warning.d.ts","../node_modules/.pnpm/postcss@8.5.6/node_modules/postcss/lib/lazy-result.d.ts","../node_modules/.pnpm/postcss@8.5.6/node_modules/postcss/lib/no-work-result.d.ts","../node_modules/.pnpm/postcss@8.5.6/node_modules/postcss/lib/processor.d.ts","../node_modules/.pnpm/postcss@8.5.6/node_modules/postcss/lib/result.d.ts","../node_modules/.pnpm/postcss@8.5.6/node_modules/postcss/lib/document.d.ts","../node_modules/.pnpm/postcss@8.5.6/node_modules/postcss/lib/rule.d.ts","../node_modules/.pnpm/postcss@8.5.6/node_modules/postcss/lib/node.d.ts","../node_modules/.pnpm/postcss@8.5.6/node_modules/postcss/lib/comment.d.ts","../node_modules/.pnpm/postcss@8.5.6/node_modules/postcss/lib/container.d.ts","../node_modules/.pnpm/postcss@8.5.6/node_modules/postcss/lib/at-rule.d.ts","../node_modules/.pnpm/postcss@8.5.6/node_modules/postcss/lib/list.d.ts","../node_modules/.pnpm/postcss@8.5.6/node_modules/postcss/lib/postcss.d.ts","../node_modules/.pnpm/postcss@8.5.6/node_modules/postcss/lib/postcss.d.mts","../node_modules/.pnpm/vite@5.4.21_@types+node@20.19.25_sass@1.94.1_terser@5.44.1/node_modules/vite/dist/node/runtime.d.ts","../node_modules/.pnpm/vite@5.4.21_@types+node@20.19.25_sass@1.94.1_terser@5.44.1/node_modules/vite/types/importglob.d.ts","../node_modules/.pnpm/vite@5.4.21_@types+node@20.19.25_sass@1.94.1_terser@5.44.1/node_modules/vite/types/metadata.d.ts","../node_modules/.pnpm/vite@5.4.21_@types+node@20.19.25_sass@1.94.1_terser@5.44.1/node_modules/vite/dist/node/index.d.ts","../node_modules/.pnpm/@babel+types@7.28.5/node_modules/@babel/types/lib/index.d.ts","../node_modules/.pnpm/@vue+shared@3.5.24/node_modules/@vue/shared/dist/shared.d.ts","../node_modules/.pnpm/@babel+parser@7.28.5/node_modules/@babel/parser/typings/babel-parser.d.ts","../node_modules/.pnpm/@vue+compiler-core@3.5.24/node_modules/@vue/compiler-core/dist/compiler-core.d.ts","../node_modules/.pnpm/magic-string@0.30.21/node_modules/magic-string/dist/magic-string.es.d.mts","../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/typescript.d.ts","../node_modules/.pnpm/@vue+compiler-sfc@3.5.24/node_modules/@vue/compiler-sfc/dist/compiler-sfc.d.ts","../node_modules/.pnpm/vue@3.5.24_typescript@5.9.3/node_modules/vue/compiler-sfc/index.d.mts","../node_modules/.pnpm/@vitejs+plugin-vue@5.2.4_vi_e70672b9796244f49d066a536954e836/node_modules/@vitejs/plugin-vue/dist/index.d.mts","./vite.config.ts","./node_modules/@types/connect/index.d.ts","./node_modules/@types/body-parser/index.d.ts","./node_modules/@types/estree/index.d.ts","./node_modules/@types/event-emitter/index.d.ts","./node_modules/@types/send/index.d.ts","./node_modules/@types/qs/index.d.ts","./node_modules/@types/range-parser/index.d.ts","./node_modules/@types/express-serve-static-core/index.d.ts","./node_modules/@types/http-errors/index.d.ts","./node_modules/@types/serve-static/index.d.ts","./node_modules/@types/express/index.d.ts","../node_modules/.pnpm/@types+body-parser@1.19.6/node_modules/@types/body-parser/index.d.ts","../node_modules/.pnpm/@types+send@1.2.1/node_modules/@types/send/index.d.ts","../node_modules/.pnpm/@types+qs@6.14.0/node_modules/@types/qs/index.d.ts","../node_modules/.pnpm/@types+range-parser@1.2.7/node_modules/@types/range-parser/index.d.ts","../node_modules/.pnpm/@types+express-serve-static-core@4.19.7/node_modules/@types/express-serve-static-core/index.d.ts","../node_modules/.pnpm/@types+http-errors@2.0.5/node_modules/@types/http-errors/index.d.ts","../node_modules/.pnpm/@types+mime@1.3.5/node_modules/@types/mime/index.d.ts","../node_modules/.pnpm/@types+send@0.17.6/node_modules/@types/send/index.d.ts","../node_modules/.pnpm/@types+serve-static@1.15.10/node_modules/@types/serve-static/index.d.ts","../node_modules/.pnpm/@types+express@4.17.25/node_modules/@types/express/index.d.ts","../node_modules/.pnpm/@types+multer@2.0.0/node_modules/@types/multer/index.d.ts","../node_modules/.pnpm/@types+adm-zip@0.5.7/node_modules/@types/adm-zip/util.d.ts","../node_modules/.pnpm/@types+adm-zip@0.5.7/node_modules/@types/adm-zip/index.d.ts","../node_modules/.pnpm/@types+babel__generator@7.27.0/node_modules/@types/babel__generator/index.d.ts","../node_modules/.pnpm/@types+babel__template@7.4.4/node_modules/@types/babel__template/index.d.ts","../node_modules/.pnpm/@types+babel__traverse@7.28.0/node_modules/@types/babel__traverse/index.d.ts","../node_modules/.pnpm/@types+babel__core@7.20.5/node_modules/@types/babel__core/index.d.ts","../node_modules/.pnpm/@types+bcrypt@5.0.2/node_modules/@types/bcrypt/index.d.ts","../node_modules/.pnpm/@types+json-schema@7.0.15/node_modules/@types/json-schema/index.d.ts","../node_modules/.pnpm/@types+eslint@9.6.1/node_modules/@types/eslint/use-at-your-own-risk.d.ts","../node_modules/.pnpm/@types+eslint@9.6.1/node_modules/@types/eslint/index.d.ts","../node_modules/.pnpm/@types+eslint-scope@3.7.7/node_modules/@types/eslint-scope/index.d.ts","../node_modules/.pnpm/@types+graceful-fs@4.1.9/node_modules/@types/graceful-fs/index.d.ts","../node_modules/.pnpm/@types+istanbul-lib-coverage@2.0.6/node_modules/@types/istanbul-lib-coverage/index.d.ts","../node_modules/.pnpm/@types+istanbul-lib-report@3.0.3/node_modules/@types/istanbul-lib-report/index.d.ts","../node_modules/.pnpm/@types+istanbul-reports@3.0.4/node_modules/@types/istanbul-reports/index.d.ts","../node_modules/.pnpm/@jest+expect-utils@29.7.0/node_modules/@jest/expect-utils/build/index.d.ts","../node_modules/.pnpm/chalk@4.1.2/node_modules/chalk/index.d.ts","../node_modules/.pnpm/@sinclair+typebox@0.27.8/node_modules/@sinclair/typebox/typebox.d.ts","../node_modules/.pnpm/@jest+schemas@29.6.3/node_modules/@jest/schemas/build/index.d.ts","../node_modules/.pnpm/pretty-format@29.7.0/node_modules/pretty-format/build/index.d.ts","../node_modules/.pnpm/jest-diff@29.7.0/node_modules/jest-diff/build/index.d.ts","../node_modules/.pnpm/jest-matcher-utils@29.7.0/node_modules/jest-matcher-utils/build/index.d.ts","../node_modules/.pnpm/expect@29.7.0/node_modules/expect/build/index.d.ts","../node_modules/.pnpm/@types+jest@29.5.14/node_modules/@types/jest/index.d.ts","../node_modules/.pnpm/@types+jsonwebtoken@9.0.5/node_modules/@types/jsonwebtoken/index.d.ts","../node_modules/.pnpm/@types+ms@2.1.0/node_modules/@types/ms/index.d.ts","../node_modules/.pnpm/@types+passport@1.0.17/node_modules/@types/passport/index.d.ts","../node_modules/.pnpm/@types+jsonwebtoken@9.0.10/node_modules/@types/jsonwebtoken/index.d.ts","../node_modules/.pnpm/@types+passport-strategy@0.2.38/node_modules/@types/passport-strategy/index.d.ts","../node_modules/.pnpm/@types+passport-jwt@4.0.1/node_modules/@types/passport-jwt/index.d.ts","../node_modules/.pnpm/@types+passport-local@1.0.38/node_modules/@types/passport-local/index.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/inc.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/classes/semver.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/parse.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/valid.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/clean.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/diff.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/major.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/minor.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/patch.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/prerelease.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/compare.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/rcompare.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/compare-loose.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/compare-build.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/sort.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/rsort.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/gt.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/lt.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/eq.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/neq.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/gte.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/lte.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/cmp.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/coerce.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/classes/comparator.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/classes/range.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/satisfies.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/ranges/max-satisfying.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/ranges/min-satisfying.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/ranges/to-comparators.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/ranges/min-version.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/ranges/valid.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/ranges/outside.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/ranges/gtr.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/ranges/ltr.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/ranges/intersects.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/ranges/simplify.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/ranges/subset.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/internals/identifiers.d.ts","../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/index.d.ts","../node_modules/.pnpm/@types+stack-utils@2.0.3/node_modules/@types/stack-utils/index.d.ts","../node_modules/.pnpm/@types+uuid@10.0.0/node_modules/@types/uuid/index.d.ts","../node_modules/.pnpm/@types+validator@13.15.10/node_modules/@types/validator/lib/isboolean.d.ts","../node_modules/.pnpm/@types+validator@13.15.10/node_modules/@types/validator/lib/isemail.d.ts","../node_modules/.pnpm/@types+validator@13.15.10/node_modules/@types/validator/lib/isfqdn.d.ts","../node_modules/.pnpm/@types+validator@13.15.10/node_modules/@types/validator/lib/isiban.d.ts","../node_modules/.pnpm/@types+validator@13.15.10/node_modules/@types/validator/lib/isiso31661alpha2.d.ts","../node_modules/.pnpm/@types+validator@13.15.10/node_modules/@types/validator/lib/isiso4217.d.ts","../node_modules/.pnpm/@types+validator@13.15.10/node_modules/@types/validator/lib/isiso6391.d.ts","../node_modules/.pnpm/@types+validator@13.15.10/node_modules/@types/validator/lib/istaxid.d.ts","../node_modules/.pnpm/@types+validator@13.15.10/node_modules/@types/validator/lib/isurl.d.ts","../node_modules/.pnpm/@types+validator@13.15.10/node_modules/@types/validator/index.d.ts","../node_modules/.pnpm/@types+yargs-parser@21.0.3/node_modules/@types/yargs-parser/index.d.ts","../node_modules/.pnpm/@types+yargs@17.0.35/node_modules/@types/yargs/index.d.ts"],"fileIdsList":[[54,117,125,129,131,132,134,135,136,148,173,216],[54,117,125,129,131,132,134,135,136,148,173],[54,117,125,129,132,134,135,136,148],[54,117,125,128,129,131,132,134,135,136,148,173,220,221,222],[54,117,125,129,132,134,135,136,148,217,223,225],[54,114,115,117,125,129,132,134,135,136,148],[54,116,117,125,129,132,134,135,136,148],[117,125,129,132,134,135,136,148],[54,117,125,129,132,134,135,136,148,156],[54,117,118,123,125,128,129,132,134,135,136,138,148,153,165],[54,117,118,119,125,128,129,132,134,135,136,148],[54,117,120,125,129,132,134,135,136,148,166],[54,117,121,122,125,129,132,134,135,136,139,148],[54,117,122,125,129,132,134,135,136,148,153,162],[54,117,123,125,128,129,132,134,135,136,138,148],[54,116,117,124,125,129,132,134,135,136,148],[54,117,125,126,129,132,134,135,136,148],[54,117,125,127,128,129,132,134,135,136,148],[54,116,117,125,128,129,132,134,135,136,148],[54,117,125,128,129,130,132,134,135,136,148,153,165],[54,117,125,128,129,130,132,134,135,136,148,153,156],[54,104,117,125,128,129,131,132,134,135,136,138,148,153,165],[54,117,125,128,129,131,132,134,135,136,138,148,153,162,165],[54,117,125,129,131,132,133,134,135,136,148,153,162,165],[52,53,54,55,56,57,58,59,60,61,62,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172],[54,117,125,128,129,132,134,135,136,148],[54,117,125,129,132,134,136,148],[54,117,125,129,132,134,135,136,137,148,165],[54,117,125,128,129,132,134,135,136,138,148,153],[54,117,125,129,132,134,135,136,139,148],[54,117,125,129,132,134,135,136,140,148],[54,117,125,128,129,132,134,135,136,143,148],[54,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172],[54,117,125,129,132,134,135,136,145,148],[54,117,125,129,132,134,135,136,146,148],[54,117,122,125,129,132,134,135,136,138,148,156],[54,117,125,128,129,132,134,135,136,148,149],[54,117,125,129,132,134,135,136,148,150,166,169],[54,117,125,128,129,132,134,135,136,148,153,155,156],[54,117,125,129,132,134,135,136,148,154,156],[54,117,125,129,132,134,135,136,148,156,166],[54,117,125,129,132,134,135,136,148,157],[54,114,117,125,129,132,134,135,136,148,153,159],[54,117,125,129,132,134,135,136,148,153,158],[54,117,125,128,129,132,134,135,136,148,160,161],[54,117,125,129,132,134,135,136,148,160,161],[54,117,122,125,129,132,134,135,136,138,148,153,162],[54,117,125,129,132,134,135,136,148,163],[54,117,125,129,132,134,135,136,138,148,164],[54,117,125,129,131,132,134,135,136,146,148,165],[54,117,125,129,132,134,135,136,148,166,167],[54,117,122,125,129,132,134,135,136,148,167],[54,117,125,129,132,134,135,136,148,153,168],[54,117,125,129,132,134,135,136,137,148,169],[54,117,125,129,132,134,135,136,148,170],[54,117,120,125,129,132,134,135,136,148],[54,117,122,125,129,132,134,135,136,148],[54,117,125,129,132,134,135,136,148,166],[54,104,117,125,129,132,134,135,136,148],[54,117,125,129,132,134,135,136,148,165],[54,117,125,129,132,134,135,136,148,171],[54,117,125,129,132,134,135,136,143,148],[54,117,125,129,132,134,135,136,148,161],[54,104,117,125,128,129,130,132,134,135,136,143,148,153,156,165,168,169,171],[54,117,125,129,132,134,135,136,148,153,172],[54,117,125,129,132,134,135,136,148,153,173],[54,117,125,129,131,132,134,135,136,148,173,224],[54,70,73,76,77,117,125,129,132,134,135,136,148,165],[54,73,117,125,129,132,134,135,136,148,153,165],[54,73,77,117,125,129,132,134,135,136,148,165],[54,117,125,129,132,134,135,136,148,153],[54,67,117,125,129,132,134,135,136,148],[54,71,117,125,129,132,134,135,136,148],[54,69,70,73,117,125,129,132,134,135,136,148,165],[54,117,125,129,132,134,135,136,138,148,162],[54,117,125,129,132,134,135,136,148,173],[54,67,117,125,129,132,134,135,136,148,173],[54,69,73,117,125,129,132,134,135,136,138,148,165],[54,64,65,66,68,72,117,125,128,129,132,134,135,136,148,153,165],[54,73,81,89,117,125,129,132,134,135,136,148],[54,65,71,117,125,129,132,134,135,136,148],[54,73,98,99,117,125,129,132,134,135,136,148],[54,65,68,73,117,125,129,132,134,135,136,148,156,165,173],[54,73,117,125,129,132,134,135,136,148],[54,69,73,117,125,129,132,134,135,136,148,165],[54,64,117,125,129,132,134,135,136,148],[54,67,68,69,71,72,73,74,75,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,99,100,101,102,103,117,125,129,132,134,135,136,148],[54,73,91,94,117,125,129,132,134,135,136,148],[54,73,81,82,83,117,125,129,132,134,135,136,148],[54,71,73,82,84,117,125,129,132,134,135,136,148],[54,72,117,125,129,132,134,135,136,148],[54,65,67,73,117,125,129,132,134,135,136,148],[54,73,77,82,84,117,125,129,132,134,135,136,148],[54,77,117,125,129,132,134,135,136,148],[54,71,73,76,117,125,129,132,134,135,136,148,165],[54,65,69,73,81,117,125,129,132,134,135,136,148],[54,73,91,117,125,129,132,134,135,136,148],[54,84,117,125,129,132,134,135,136,148],[54,67,73,98,117,125,129,132,134,135,136,148,156,171,173],[54,117,125,129,132,134,135,136,140,148,205,214],[54,117,125,129,132,134,135,136,148,206],[54,117,125,129,132,134,135,136,148,255],[54,117,125,129,132,134,135,136,148,173,238],[54,117,125,129,132,134,135,136,148,206,208,240,241,242],[54,117,125,129,132,134,135,136,148,206,208],[54,117,125,129,131,132,134,135,136,148,216],[54,117,125,129,132,134,135,136,148,174,175,247],[54,117,125,129,132,134,135,136,148,174,175,245,246],[54,117,125,129,132,134,135,136,148,247],[54,117,125,129,132,134,135,136,148,217,221,223,225,231,235],[54,117,125,129,132,134,135,136,148,250],[54,117,125,129,132,134,135,136,148,251],[54,117,125,129,132,134,135,136,148,257,260],[54,117,122,125,129,132,134,135,136,148,173,263],[54,117,122,125,129,132,134,135,136,148,173],[54,117,125,129,132,134,135,136,148,153,236],[54,117,125,129,132,134,135,136,148,265,266],[54,117,125,129,132,134,135,136,148,236,264,266],[54,117,125,129,132,134,135,136,148,226,236,264],[54,117,125,129,131,132,134,135,136,148,236],[54,117,125,129,132,134,135,136,148,270,308],[54,117,125,129,132,134,135,136,148,270,293,308],[54,117,125,129,132,134,135,136,148,269,308],[54,117,125,129,132,134,135,136,148,308],[54,117,125,129,132,134,135,136,148,270],[54,117,125,129,132,134,135,136,148,270,294,308],[54,117,125,129,132,134,135,136,148,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307],[54,117,125,129,132,134,135,136,148,294,308],[54,117,125,129,132,134,135,136,148,153,173,233],[54,117,125,129,131,132,134,135,136,148,173,224,234],[54,117,125,129,132,134,135,136,148,311,312,313,314,315,316,317,318,319],[54,117,125,129,132,134,135,136,148,321],[54,117,125,129,132,134,135,136,148,205,213],[54,117,125,129,132,134,135,136,148,206,207,208],[54,117,125,129,132,134,135,136,148,201,206,208,209,210,211],[54,117,125,129,132,134,135,136,148,253,259],[54,117,125,129,132,134,135,136,148,257],[54,117,125,129,132,134,135,136,148,254,258],[54,117,125,129,132,134,135,136,148,197],[54,117,125,129,132,134,135,136,148,195,197],[54,117,125,129,132,134,135,136,148,186,194,195,196,198,200],[54,117,125,129,132,134,135,136,148,184],[54,117,125,129,132,134,135,136,148,187,192,197,200],[54,117,125,129,132,134,135,136,148,183,200],[54,117,125,129,132,134,135,136,148,187,188,191,192,193,200],[54,117,125,129,132,134,135,136,148,187,188,189,191,192,200],[54,117,125,129,132,134,135,136,148,184,185,186,187,188,192,193,194,196,197,198,200],[54,117,125,129,132,134,135,136,148,200],[54,117,125,129,132,134,135,136,148,182,184,185,186,187,188,189,191,192,193,194,195,196,197,198,199],[54,117,125,129,132,134,135,136,148,182,200],[54,117,125,129,132,134,135,136,148,187,189,190,192,193,200],[54,117,125,129,132,134,135,136,148,191,200],[54,117,125,129,132,134,135,136,148,192,193,197,200],[54,117,125,129,132,134,135,136,148,185,195],[54,117,125,129,132,134,135,136,148,256],[54,117,125,129,132,134,135,136,148,175,204],[54,117,125,129,132,134,135,136,148,174,175],[54,117,125,128,129,131,132,133,134,135,136,138,148,153,162,165,172,173,175,176,177,178,179,180,181,201,202,203,204],[54,117,125,129,132,134,135,136,148,177,178,179,180],[54,117,125,129,132,134,135,136,148,177,178,179],[54,117,125,129,132,134,135,136,148,177],[54,117,125,129,132,134,135,136,148,178],[54,117,125,129,132,134,135,136,148,175],[54,117,125,129,132,134,135,136,148,212]],"fileInfos":[{"version":"a7297ff837fcdf174a9524925966429eb8e5feecc2cc55cc06574e6b092c1eaa","impliedFormat":1},{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"80e18897e5884b6723488d4f5652167e7bb5024f946743134ecc4aa4ee731f89","affectsGlobalScope":true,"impliedFormat":1},{"version":"cd034f499c6cdca722b60c04b5b1b78e058487a7085a8e0d6fb50809947ee573","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"51ad4c928303041605b4d7ae32e0c1ee387d43a24cd6f1ebf4a2699e1076d4fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"196cb558a13d4533a5163286f30b0509ce0210e4b316c56c38d4c0fd2fb38405","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"0ccdaa19852d25ecd84eec365c3bfa16e7859cadecf6e9ca6d0dbbbee439743f","affectsGlobalScope":true,"impliedFormat":1},{"version":"438b41419b1df9f1fbe33b5e1b18f5853432be205991d1b19f5b7f351675541e","affectsGlobalScope":true,"impliedFormat":1},{"version":"096116f8fedc1765d5bd6ef360c257b4a9048e5415054b3bf3c41b07f8951b0b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5e01375c9e124a83b52ee4b3244ed1a4d214a6cfb54ac73e164a823a4a7860a","affectsGlobalScope":true,"impliedFormat":1},{"version":"f90ae2bbce1505e67f2f6502392e318f5714bae82d2d969185c4a6cecc8af2fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b58e207b93a8f1c88bbf2a95ddc686ac83962b13830fe8ad3f404ffc7051fb4","affectsGlobalScope":true,"impliedFormat":1},{"version":"1fefabcb2b06736a66d2904074d56268753654805e829989a46a0161cd8412c5","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"c18a99f01eb788d849ad032b31cafd49de0b19e083fe775370834c5675d7df8e","affectsGlobalScope":true,"impliedFormat":1},{"version":"5247874c2a23b9a62d178ae84f2db6a1d54e6c9a2e7e057e178cc5eea13757fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e9c23ba78aabc2e0a27033f18737a6df754067731e69dc5f52823957d60a4b6","impliedFormat":1},{"version":"cdcf9ea426ad970f96ac930cd176d5c69c6c24eebd9fc580e1572d6c6a88f62c","impliedFormat":1},{"version":"23cd712e2ce083d68afe69224587438e5914b457b8acf87073c22494d706a3d0","impliedFormat":1},{"version":"487b694c3de27ddf4ad107d4007ad304d29effccf9800c8ae23c2093638d906a","impliedFormat":1},{"version":"3a80bc85f38526ca3b08007ee80712e7bb0601df178b23fbf0bf87036fce40ce","impliedFormat":1},{"version":"ccf4552357ce3c159ef75f0f0114e80401702228f1898bdc9402214c9499e8c0","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"68834d631c8838c715f225509cfc3927913b9cc7a4870460b5b60c8dbdb99baf","impliedFormat":1},{"version":"2931540c47ee0ff8a62860e61782eb17b155615db61e36986e54645ec67f67c2","impliedFormat":1},{"version":"ccab02f3920fc75c01174c47fcf67882a11daf16baf9e81701d0a94636e94556","impliedFormat":1},{"version":"f6faf5f74e4c4cc309a6c6a6c4da02dbb840be5d3e92905a23dcd7b2b0bd1986","impliedFormat":1},{"version":"ea6bc8de8b59f90a7a3960005fd01988f98fd0784e14bc6922dde2e93305ec7d","impliedFormat":1},{"version":"36107995674b29284a115e21a0618c4c2751b32a8766dd4cb3ba740308b16d59","impliedFormat":1},{"version":"914a0ae30d96d71915fc519ccb4efbf2b62c0ddfb3a3fc6129151076bc01dc60","impliedFormat":1},{"version":"33e981bf6376e939f99bd7f89abec757c64897d33c005036b9a10d9587d80187","impliedFormat":1},{"version":"7fd1b31fd35876b0aa650811c25ec2c97a3c6387e5473eb18004bed86cdd76b6","impliedFormat":1},{"version":"b41767d372275c154c7ea6c9d5449d9a741b8ce080f640155cc88ba1763e35b3","impliedFormat":1},{"version":"3bacf516d686d08682751a3bd2519ea3b8041a164bfb4f1d35728993e70a2426","impliedFormat":1},{"version":"7fb266686238369442bd1719bc0d7edd0199da4fb8540354e1ff7f16669b4323","impliedFormat":1},{"version":"0a60a292b89ca7218b8616f78e5bbd1c96b87e048849469cccb4355e98af959a","impliedFormat":1},{"version":"0b6e25234b4eec6ed96ab138d96eb70b135690d7dd01f3dd8a8ab291c35a683a","impliedFormat":1},{"version":"9666f2f84b985b62400d2e5ab0adae9ff44de9b2a34803c2c5bd3c8325b17dc0","impliedFormat":1},{"version":"40cd35c95e9cf22cfa5bd84e96408b6fcbca55295f4ff822390abb11afbc3dca","impliedFormat":1},{"version":"b1616b8959bf557feb16369c6124a97a0e74ed6f49d1df73bb4b9ddf68acf3f3","impliedFormat":1},{"version":"5b03a034c72146b61573aab280f295b015b9168470f2df05f6080a2122f9b4df","impliedFormat":1},{"version":"40b463c6766ca1b689bfcc46d26b5e295954f32ad43e37ee6953c0a677e4ae2b","impliedFormat":1},{"version":"249b9cab7f5d628b71308c7d9bb0a808b50b091e640ba3ed6e2d0516f4a8d91d","impliedFormat":1},{"version":"80aae6afc67faa5ac0b32b5b8bc8cc9f7fa299cff15cf09cc2e11fd28c6ae29e","impliedFormat":1},{"version":"f473cd2288991ff3221165dcf73cd5d24da30391f87e85b3dd4d0450c787a391","impliedFormat":1},{"version":"499e5b055a5aba1e1998f7311a6c441a369831c70905cc565ceac93c28083d53","impliedFormat":1},{"version":"54c3e2371e3d016469ad959697fd257e5621e16296fa67082c2575d0bf8eced0","impliedFormat":1},{"version":"beb8233b2c220cfa0feea31fbe9218d89fa02faa81ef744be8dce5acb89bb1fd","impliedFormat":1},{"version":"c183b931b68ad184bc8e8372bf663f3d33304772fb482f29fb91b3c391031f3e","impliedFormat":1},{"version":"5d0375ca7310efb77e3ef18d068d53784faf62705e0ad04569597ae0e755c401","impliedFormat":1},{"version":"59af37caec41ecf7b2e76059c9672a49e682c1a2aa6f9d7dc78878f53aa284d6","impliedFormat":1},{"version":"addf417b9eb3f938fddf8d81e96393a165e4be0d4a8b6402292f9c634b1cb00d","impliedFormat":1},{"version":"48cc3ec153b50985fb95153258a710782b25975b10dd4ac8a4f3920632d10790","impliedFormat":1},{"version":"adf27937dba6af9f08a68c5b1d3fce0ca7d4b960c57e6d6c844e7d1a8e53adae","impliedFormat":1},{"version":"e1528ca65ac90f6fa0e4a247eb656b4263c470bb22d9033e466463e13395e599","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"866078923a56d026e39243b4392e282c1c63159723996fa89243140e1388a98d","impliedFormat":1},{"version":"dd0109710de4cd93e245121ab86d8c66d20f3ead80074b68e9c3e349c4f53342","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3275d55fac10b799c9546804126239baf020d220136163f763b55a74e50e750","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa68a0a3b7cb32c00e39ee3cd31f8f15b80cac97dce51b6ee7fc14a1e8deb30b","affectsGlobalScope":true,"impliedFormat":1},{"version":"1cf059eaf468efcc649f8cf6075d3cb98e9a35a0fe9c44419ec3d2f5428d7123","affectsGlobalScope":true,"impliedFormat":1},{"version":"6c36e755bced82df7fb6ce8169265d0a7bb046ab4e2cb6d0da0cb72b22033e89","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"7a93de4ff8a63bafe62ba86b89af1df0ccb5e40bb85b0c67d6bbcfdcf96bf3d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"90e85f9bc549dfe2b5749b45fe734144e96cd5d04b38eae244028794e142a77e","affectsGlobalScope":true,"impliedFormat":1},{"version":"e0a5deeb610b2a50a6350bd23df6490036a1773a8a71d70f2f9549ab009e67ee","affectsGlobalScope":true,"impliedFormat":1},{"version":"435b3711465425770ed2ee2f1cf00ce071835265e0851a7dc4600ab4b007550e","impliedFormat":1},{"version":"7e49f52a159435fc8df4de9dc377ef5860732ca2dc9efec1640531d3cf5da7a3","impliedFormat":1},{"version":"dd4bde4bdc2e5394aed6855e98cf135dfdf5dd6468cad842e03116d31bbcc9bc","impliedFormat":1},{"version":"4d4e879009a84a47c05350b8dca823036ba3a29a3038efed1be76c9f81e45edf","affectsGlobalScope":true,"impliedFormat":1},{"version":"cf83d90d5faf27b994c2e79af02e32b555dbfe42cd9bd1571445f2168d1f4e2d","impliedFormat":1},{"version":"9ba13b47cb450a438e3076c4a3f6afb9dc85e17eae50f26d4b2d72c0688c9251","impliedFormat":1},{"version":"b64cd4401633ea4ecadfd700ddc8323a13b63b106ac7127c1d2726f32424622c","impliedFormat":1},{"version":"37c6e5fe5715814412b43cc9b50b24c67a63c4e04e753e0d1305970d65417a60","impliedFormat":1},{"version":"0e28335ac43f4d94dd2fe6d9e6fa6813570640839addd10d309d7985f33a6308","impliedFormat":1},{"version":"ee0e4946247f842c6dd483cbb60a5e6b484fee07996e3a7bc7343dfb68a04c5d","impliedFormat":1},{"version":"ef051f42b7e0ef5ca04552f54c4552eac84099d64b6c5ad0ef4033574b6035b8","impliedFormat":1},{"version":"853a43154f1d01b0173d9cbd74063507ece57170bad7a3b68f3fa1229ad0a92f","impliedFormat":1},{"version":"56231e3c39a031bfb0afb797690b20ed4537670c93c0318b72d5180833d98b72","impliedFormat":1},{"version":"5cc7c39031bfd8b00ad58f32143d59eb6ffc24f5d41a20931269011dccd36c5e","impliedFormat":1},{"version":"b0b69c61b0f0ec8ca15db4c8c41f6e77f4cacb784d42bca948f42dea33e8757e","affectsGlobalScope":true,"impliedFormat":1},{"version":"f96a48183254c00d24575401f1a761b4ce4927d927407e7862a83e06ce5d6964","impliedFormat":1},{"version":"cc25940cfb27aa538e60d465f98bb5068d4d7d33131861ace43f04fe6947d68f","impliedFormat":1},{"version":"ac86245c2f31335bfd52cbe7fc760f9fc4f165387875869a478a6d9616a95e72","impliedFormat":1},{"version":"01ff95aa1443e3f7248974e5a771f513cb2ac158c8898f470a1792f817bee497","impliedFormat":1},{"version":"9d96a7ce809392ff2cb99691acf7c62e632fe56897356ba013b689277aca3619","impliedFormat":1},{"version":"42a05d8f239f74587d4926aba8cc54792eed8e8a442c7adc9b38b516642aadfe","impliedFormat":1},{"version":"5d21b58d60383cc6ab9ad3d3e265d7d25af24a2c9b506247e0e50b0a884920be","impliedFormat":1},{"version":"101f482fd48cb4c7c0468dcc6d62c843d842977aea6235644b1edd05e81fbf22","impliedFormat":1},{"version":"ae6757460f37078884b1571a3de3ebaf724d827d7e1d53626c02b3c2a408ac63","affectsGlobalScope":true,"impliedFormat":1},{"version":"27c0a08e343c6a0ae17bd13ba6d44a9758236dc904cd5e4b43456996cd51f520","impliedFormat":1},{"version":"3ef397f12387eff17f550bc484ea7c27d21d43816bbe609d495107f44b97e933","impliedFormat":1},{"version":"1023282e2ba810bc07905d3668349fbd37a26411f0c8f94a70ef3c05fe523fcf","impliedFormat":1},{"version":"b214ebcf76c51b115453f69729ee8aa7b7f8eccdae2a922b568a45c2d7ff52f7","impliedFormat":1},{"version":"429c9cdfa7d126255779efd7e6d9057ced2d69c81859bbab32073bad52e9ba76","impliedFormat":1},{"version":"6f80e51ba310608cd71bcdc09a171d7bbfb3b316048601c9ec215ce16a8dcfbc","impliedFormat":1},{"version":"70ac82add6c6f5c8a4a1db5390e75ead5a0cf5cd50216cf22769870c7026c786","affectsGlobalScope":true,"impliedFormat":1},{"version":"7f2c62938251b45715fd2a9887060ec4fbc8724727029d1cbce373747252bdd7","impliedFormat":1},{"version":"e3ace08b6bbd84655d41e244677b474fd995923ffef7149ddb68af8848b60b05","impliedFormat":1},{"version":"132580b0e86c48fab152bab850fc57a4b74fe915c8958d2ccb052b809a44b61c","impliedFormat":1},{"version":"af4ab0aa8908fc9a655bb833d3bc28e117c4f0e1038c5a891546158beb25accb","impliedFormat":1},{"version":"69c9a5a9392e8564bd81116e1ed93b13205201fb44cb35a7fde8c9f9e21c4b23","impliedFormat":1},{"version":"5f8fc37f8434691ffac1bfd8fc2634647da2c0e84253ab5d2dd19a7718915b35","impliedFormat":1},{"version":"5981c2340fd8b076cae8efbae818d42c11ffc615994cb060b1cd390795f1be2b","impliedFormat":1},{"version":"2ca2bca6845a7234eff5c3d192727a068fca72ac565f3c819c6b04ccc83dadc0","impliedFormat":1},{"version":"ed4f674fc8c0c993cc7e145069ac44129e03519b910c62be206a0cc777bdc60b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0250da3eb85c99624f974e77ef355cdf86f43980251bc371475c2b397ba55bcd","impliedFormat":1},{"version":"f1c93e046fb3d9b7f8249629f4b63dc068dd839b824dd0aa39a5e68476dc9420","impliedFormat":1},{"version":"3d3a5f27ffbc06c885dd4d5f9ee20de61faf877fe2c3a7051c4825903d9a7fdc","impliedFormat":1},{"version":"12806f9f085598ef930edaf2467a5fa1789a878fba077cd27e85dc5851e11834","impliedFormat":1},{"version":"17d06eb5709839c7ce719f0c38ada6f308fb433f2cd6d8c87b35856e07400950","impliedFormat":1},{"version":"a43fe41c33d0a192a0ecaf9b92e87bef3709c9972e6d53c42c49251ccb962d69","impliedFormat":1},{"version":"a177959203c017fad3ecc4f3d96c8757a840957a4959a3ae00dab9d35961ca6c","affectsGlobalScope":true,"impliedFormat":1},{"version":"6fc727ccf9b36e257ff982ea0badeffbfc2c151802f741bddff00c6af3b784cf","impliedFormat":1},{"version":"2a00d005e3af99cd1cfa75220e60c61b04bfb6be7ca7453bfe2ef6cca37cc03c","impliedFormat":1},{"version":"4844a4c9b4b1e812b257676ed8a80b3f3be0e29bf05e742cc2ea9c3c6865e6c6","impliedFormat":1},{"version":"064878a60367e0407c42fb7ba02a2ea4d83257357dc20088e549bd4d89433e9c","impliedFormat":1},{"version":"14d4bd22d1b05824971b98f7e91b2484c90f1a684805c330476641417c3d9735","impliedFormat":1},{"version":"586eaf66bace2e731cee0ddfbfac326ad74a83c1acfeac4afb2db85ad23226c7","impliedFormat":1},{"version":"b484ec11ba00e3a2235562a41898d55372ccabe607986c6fa4f4aba72093749f","impliedFormat":1},{"version":"d1a14d87cedcf4f0b8173720d6eb29cc02878bf2b6dabf9c9d9cee742f275368","impliedFormat":1},{"version":"e60efae9fe48a2955f66bf4cbf0f082516185b877daf50d9c5e2a009660a7714","impliedFormat":1},{"version":"041a7781b9127ab568d2cdcce62c58fdea7c7407f40b8c50045d7866a2727130","impliedFormat":1},{"version":"b37f83e7deea729aa9ce5593f78905afb45b7532fdff63041d374f60059e7852","impliedFormat":1},{"version":"e1cb68f3ef3a8dd7b2a9dfb3de482ed6c0f1586ba0db4e7d73c1d2147b6ffc51","impliedFormat":1},{"version":"55cdbeebe76a1fa18bbd7e7bf73350a2173926bd3085bb050cf5a5397025ee4e","impliedFormat":1},{"version":"151ff381ef9ff8da2da9b9663ebf657eac35c4c9a19183420c05728f31a6761d","impliedFormat":1},{"version":"6cd8f2410e4cf6d7870f018b38dcf1ac4771f06b363b5d71831d924cda3c488d","affectsGlobalScope":true,"impliedFormat":1},{"version":"a660aa95476042d3fdcc1343cf6bb8fdf24772d31712b1db321c5a4dcc325434","impliedFormat":1},{"version":"282f98006ed7fa9bb2cd9bdbe2524595cfc4bcd58a0bb3232e4519f2138df811","impliedFormat":1},{"version":"6222e987b58abfe92597e1273ad7233626285bc2d78409d4a7b113d81a83496b","impliedFormat":1},{"version":"cbe726263ae9a7bf32352380f7e8ab66ee25b3457137e316929269c19e18a2be","impliedFormat":1},{"version":"8b96046bf5fb0a815cba6b0880d9f97b7f3a93cf187e8dcfe8e2792e97f38f87","impliedFormat":99},{"version":"bacf2c84cf448b2cd02c717ad46c3d7fd530e0c91282888c923ad64810a4d511","affectsGlobalScope":true,"impliedFormat":1},{"version":"402e5c534fb2b85fa771170595db3ac0dd532112c8fa44fc23f233bc6967488b","impliedFormat":1},{"version":"8885cf05f3e2abf117590bbb951dcf6359e3e5ac462af1c901cfd24c6a6472e2","impliedFormat":1},{"version":"333caa2bfff7f06017f114de738050dd99a765c7eb16571c6d25a38c0d5365dc","impliedFormat":1},{"version":"e61df3640a38d535fd4bc9f4a53aef17c296b58dc4b6394fd576b808dd2fe5e6","impliedFormat":1},{"version":"459920181700cec8cbdf2a5faca127f3f17fd8dd9d9e577ed3f5f3af5d12a2e4","impliedFormat":1},{"version":"4719c209b9c00b579553859407a7e5dcfaa1c472994bd62aa5dd3cc0757eb077","impliedFormat":1},{"version":"7ec359bbc29b69d4063fe7dad0baaf35f1856f914db16b3f4f6e3e1bca4099fa","impliedFormat":1},{"version":"70790a7f0040993ca66ab8a07a059a0f8256e7bb57d968ae945f696cbff4ac7a","impliedFormat":1},{"version":"d1b9a81e99a0050ca7f2d98d7eedc6cda768f0eb9fa90b602e7107433e64c04c","impliedFormat":1},{"version":"a022503e75d6953d0e82c2c564508a5c7f8556fad5d7f971372d2d40479e4034","impliedFormat":1},{"version":"b215c4f0096f108020f666ffcc1f072c81e9f2f95464e894a5d5f34c5ea2a8b1","impliedFormat":1},{"version":"644491cde678bd462bb922c1d0cfab8f17d626b195ccb7f008612dc31f445d2d","impliedFormat":1},{"version":"dfe54dab1fa4961a6bcfba68c4ca955f8b5bbeb5f2ab3c915aa7adaa2eabc03a","impliedFormat":1},{"version":"1251d53755b03cde02466064260bb88fd83c30006a46395b7d9167340bc59b73","impliedFormat":1},{"version":"47865c5e695a382a916b1eedda1b6523145426e48a2eae4647e96b3b5e52024f","impliedFormat":1},{"version":"4cdf27e29feae6c7826cdd5c91751cc35559125e8304f9e7aed8faef97dcf572","impliedFormat":1},{"version":"331b8f71bfae1df25d564f5ea9ee65a0d847c4a94baa45925b6f38c55c7039bf","impliedFormat":1},{"version":"2a771d907aebf9391ac1f50e4ad37952943515eeea0dcc7e78aa08f508294668","impliedFormat":1},{"version":"0146fd6262c3fd3da51cb0254bb6b9a4e42931eb2f56329edd4c199cb9aaf804","impliedFormat":1},{"version":"183f480885db5caa5a8acb833c2be04f98056bdcc5fb29e969ff86e07efe57ab","impliedFormat":99},{"version":"82e687ebd99518bc63ea04b0c3810fb6e50aa6942decd0ca6f7a56d9b9a212a6","impliedFormat":99},{"version":"7f698624bbbb060ece7c0e51b7236520ebada74b747d7523c7df376453ed6fea","impliedFormat":1},{"version":"8f07f2b6514744ac96e51d7cb8518c0f4de319471237ea10cf688b8d0e9d0225","impliedFormat":1},{"version":"257b83faa134d971c738a6b9e4c47e59bb7b23274719d92197580dd662bfafc3","impliedFormat":99},{"version":"c2c2a861a338244d7dd700d0c52a78916b4bb75b98fc8ca5e7c501899fc03796","impliedFormat":1},{"version":"f468b74459f1ad4473b36a36d49f2b255f3c6b5d536c81239c2b2971df089eaf","impliedFormat":1},{"version":"adb467429462e3891de5bb4a82a4189b92005d61c7f9367c089baf03997c104e","impliedFormat":1},{"version":"7f108fc2f0dd96e1ce5e6942c555538afc4d836d4e22b60cdbe034caaac7b521","impliedFormat":1},{"version":"2be2227c3810dfd84e46674fd33b8d09a4a28ad9cb633ed536effd411665ea1e","impliedFormat":99},{"version":"e134052a6b1ded61693b4037f615dc72f14e2881e79c1ddbff6c514c8a516b05","impliedFormat":1},{"version":"83eeb5fc6bc433785dec98525eb003a02134024a8630134ecc67404d0075c26e","impliedFormat":1},{"version":"3feec212c0aeb91e5a6e62caaf9f128954590210f8c302910ea377c088f6b61a","impliedFormat":99},{"version":"bbdfaf7d9b20534c5df1e1b937a20f17ca049d603a2afe072983bf7aff2279f5","impliedFormat":99},{"version":"97ab2abbd3d680156129967147b157dfb2eeb90b0ba60238627a59a697c6f59c","signature":"4b96dd19fd2949d28ce80e913412b0026dc421e5bf6c31d87c7b5eb11b5753b4"},{"version":"104c67f0da1bdf0d94865419247e20eded83ce7f9911a1aa75fc675c077ca66e","impliedFormat":1},{"version":"cc0d0b339f31ce0ab3b7a5b714d8e578ce698f1e13d7f8c60bfb766baeb1d35c","impliedFormat":1},{"version":"151ff381ef9ff8da2da9b9663ebf657eac35c4c9a19183420c05728f31a6761d","impliedFormat":1},{"version":"2dc1bcd6a132924a89f965b60edd5b5333aaa7eb28ba5af44a0a0a328756e9ad","impliedFormat":1},{"version":"d34aa8df2d0b18fb56b1d772ff9b3c7aea7256cf0d692f969be6e1d27b74d660","impliedFormat":1},{"version":"baac9896d29bcc55391d769e408ff400d61273d832dd500f21de766205255acb","impliedFormat":1},{"version":"2f5747b1508ccf83fad0c251ba1e5da2f5a30b78b09ffa1cfaf633045160afed","impliedFormat":1},{"version":"6823ccc7b5b77bbf898d878dbcad18aa45e0fa96bdd0abd0de98d514845d9ed9","affectsGlobalScope":true,"impliedFormat":1},{"version":"b71c603a539078a5e3a039b20f2b0a0d1708967530cf97dec8850a9ca45baa2b","impliedFormat":1},{"version":"168d88e14e0d81fe170e0dadd38ae9d217476c11435ea640ddb9b7382bdb6c1f","impliedFormat":1},{"version":"8e04cf0688e0d921111659c2b55851957017148fa7b977b02727477d155b3c47","impliedFormat":1},{"version":"cc0d0b339f31ce0ab3b7a5b714d8e578ce698f1e13d7f8c60bfb766baeb1d35c","impliedFormat":1},{"version":"d34aa8df2d0b18fb56b1d772ff9b3c7aea7256cf0d692f969be6e1d27b74d660","impliedFormat":1},{"version":"baac9896d29bcc55391d769e408ff400d61273d832dd500f21de766205255acb","impliedFormat":1},{"version":"2f5747b1508ccf83fad0c251ba1e5da2f5a30b78b09ffa1cfaf633045160afed","impliedFormat":1},{"version":"94ee9ee71018d54902c3fe6730090a8a421dcad95fc372d9b69a6d5351194885","affectsGlobalScope":true,"impliedFormat":1},{"version":"b71c603a539078a5e3a039b20f2b0a0d1708967530cf97dec8850a9ca45baa2b","impliedFormat":1},{"version":"d3f2d715f57df3f04bf7b16dde01dec10366f64fce44503c92b8f78f614c1769","impliedFormat":1},{"version":"cb90077223cc1365fa21ef0911a1f9b8f2f878943523d97350dc557973ca3823","impliedFormat":1},{"version":"18f1541b81b80d806120a3489af683edfb811deb91aeca19735d9bb2613e6311","impliedFormat":1},{"version":"232f118ae64ab84dcd26ddb60eaed5a6e44302d36249abf05e9e3fc2cbb701a2","impliedFormat":1},{"version":"58564964bef3ffbd810241a8bd1c3a54347dd8adf04e1077ba49051009d3007d","affectsGlobalScope":true,"impliedFormat":1},{"version":"9063bd95bf4fe06fe71b4f1abd4dce7d41b684d9036ff4afae6e079eb252b19e","impliedFormat":1},{"version":"bb0c5cb27578678fe7a8479404efd988ceab67ff93238baf16cef721610658f7","impliedFormat":1},{"version":"b6d03c9cfe2cf0ba4c673c209fcd7c46c815b2619fd2aad59fc4229aaef2ed43","impliedFormat":1},{"version":"670a76db379b27c8ff42f1ba927828a22862e2ab0b0908e38b671f0e912cc5ed","impliedFormat":1},{"version":"13b77ab19ef7aadd86a1e54f2f08ea23a6d74e102909e3c00d31f231ed040f62","impliedFormat":1},{"version":"069bebfee29864e3955378107e243508b163e77ab10de6a5ee03ae06939f0bb9","impliedFormat":1},{"version":"160b24efb5a868df9c54f337656b4ef55fcbe0548fe15408e1c0630ec559c559","impliedFormat":1},{"version":"f3d8c757e148ad968f0d98697987db363070abada5f503da3c06aefd9d4248c1","impliedFormat":1},{"version":"a4a39b5714adfcadd3bbea6698ca2e942606d833bde62ad5fb6ec55f5e438ff8","impliedFormat":1},{"version":"bbc1d029093135d7d9bfa4b38cbf8761db505026cc458b5e9c8b74f4000e5e75","impliedFormat":1},{"version":"1f68ab0e055994eb337b67aa87d2a15e0200951e9664959b3866ee6f6b11a0fe","impliedFormat":1},{"version":"afe73051ff6a03a9565cbd8ebb0e956ee3df5e913ad5c1ded64218aabfa3dcb5","impliedFormat":1},{"version":"035a5df183489c2e22f3cf59fc1ed2b043d27f357eecc0eb8d8e840059d44245","impliedFormat":1},{"version":"a4809f4d92317535e6b22b01019437030077a76fec1d93b9881c9ed4738fcc54","impliedFormat":1},{"version":"5f53fa0bd22096d2a78533f94e02c899143b8f0f9891a46965294ee8b91a9434","impliedFormat":1},{"version":"cdcc132f207d097d7d3aa75615ab9a2e71d6a478162dde8b67f88ea19f3e54de","impliedFormat":1},{"version":"0d14fa22c41fdc7277e6f71473b20ebc07f40f00e38875142335d5b63cdfc9d2","impliedFormat":1},{"version":"c085e9aa62d1ae1375794c1fb927a445fa105fed891a7e24edbb1c3300f7384a","impliedFormat":1},{"version":"f315e1e65a1f80992f0509e84e4ae2df15ecd9ef73df975f7c98813b71e4c8da","impliedFormat":1},{"version":"5b9586e9b0b6322e5bfbd2c29bd3b8e21ab9d871f82346cb71020e3d84bae73e","impliedFormat":1},{"version":"3e70a7e67c2cb16f8cd49097360c0309fe9d1e3210ff9222e9dac1f8df9d4fb6","impliedFormat":1},{"version":"ab68d2a3e3e8767c3fba8f80de099a1cfc18c0de79e42cb02ae66e22dfe14a66","impliedFormat":1},{"version":"d96cc6598148bf1a98fb2e8dcf01c63a4b3558bdaec6ef35e087fd0562eb40ec","impliedFormat":1},{"version":"f8db4fea512ab759b2223b90ecbbe7dae919c02f8ce95ec03f7fb1cf757cfbeb","affectsGlobalScope":true,"impliedFormat":1},{"version":"0bf811dcbddc95e2551f704cfd2afc267bf619f8b8f2b7bdbb94df96ec3cbfe3","impliedFormat":1},{"version":"fb893a0dfc3c9fb0f9ca93d0648694dd95f33cbad2c0f2c629f842981dfd4e2e","impliedFormat":1},{"version":"ff155930718467b27e379e4a195e4607ce277f805cad9d2fa5f4fd5dec224df6","affectsGlobalScope":true,"impliedFormat":1},{"version":"95da3c365e3d45709ad6e0b4daa5cdaf05e9076ba3c201e8f8081dd282c02f57","impliedFormat":1},{"version":"03c92769f389dbd9e45232f7eb01c3e0f482b62555aaf2029dcbf380d5cee9e4","impliedFormat":1},{"version":"32d7f70fd3498bc76a46dab8b03af4215f445f490f8e213c80cf06b636a4e413","impliedFormat":1},{"version":"17668c1aab598920796050ee5a00d961ede5e92595f6ac8908a975ed75a537e5","impliedFormat":1},{"version":"ce6a3f09b8db73a7e9701aca91a04b4fabaf77436dd35b24482f9ee816016b17","impliedFormat":1},{"version":"20e086e5b64fdd52396de67761cc0e94693494deadb731264aac122adf08de3f","impliedFormat":1},{"version":"6e78f75403b3ec65efb41c70d392aeda94360f11cedc9fb2c039c9ea23b30962","impliedFormat":1},{"version":"c863198dae89420f3c552b5a03da6ed6d0acfa3807a64772b895db624b0de707","impliedFormat":1},{"version":"8b03a5e327d7db67112ebbc93b4f744133eda2c1743dbb0a990c61a8007823ef","impliedFormat":1},{"version":"42fad1f540271e35ca37cecda12c4ce2eef27f0f5cf0f8dd761d723c744d3159","impliedFormat":1},{"version":"ff3743a5de32bee10906aff63d1de726f6a7fd6ee2da4b8229054dfa69de2c34","impliedFormat":1},{"version":"83acd370f7f84f203e71ebba33ba61b7f1291ca027d7f9a662c6307d74e4ac22","impliedFormat":1},{"version":"1445cec898f90bdd18b2949b9590b3c012f5b7e1804e6e329fb0fe053946d5ec","impliedFormat":1},{"version":"0e5318ec2275d8da858b541920d9306650ae6ac8012f0e872fe66eb50321a669","impliedFormat":1},{"version":"cf530297c3fb3a92ec9591dd4fa229d58b5981e45fe6702a0bd2bea53a5e59be","impliedFormat":1},{"version":"c1f6f7d08d42148ddfe164d36d7aba91f467dbcb3caa715966ff95f55048b3a4","impliedFormat":1},{"version":"eefd2bbc8edb14c3bd1246794e5c070a80f9b8f3730bd42efb80df3cc50b9039","impliedFormat":1},{"version":"0c1ee27b8f6a00097c2d6d91a21ee4d096ab52c1e28350f6362542b55380059a","impliedFormat":1},{"version":"7677d5b0db9e020d3017720f853ba18f415219fb3a9597343b1b1012cfd699f7","impliedFormat":1},{"version":"bc1c6bc119c1784b1a2be6d9c47addec0d83ef0d52c8fbe1f14a51b4dfffc675","impliedFormat":1},{"version":"52cf2ce99c2a23de70225e252e9822a22b4e0adb82643ab0b710858810e00bf1","impliedFormat":1},{"version":"770625067bb27a20b9826255a8d47b6b5b0a2d3dfcbd21f89904c731f671ba77","impliedFormat":1},{"version":"d1ed6765f4d7906a05968fb5cd6d1db8afa14dbe512a4884e8ea5c0f5e142c80","impliedFormat":1},{"version":"799c0f1b07c092626cf1efd71d459997635911bb5f7fc1196efe449bba87e965","impliedFormat":1},{"version":"2a184e4462b9914a30b1b5c41cf80c6d3428f17b20d3afb711fff3f0644001fd","impliedFormat":1},{"version":"9eabde32a3aa5d80de34af2c2206cdc3ee094c6504a8d0c2d6d20c7c179503cc","impliedFormat":1},{"version":"397c8051b6cfcb48aa22656f0faca2553c5f56187262135162ee79d2b2f6c966","impliedFormat":1},{"version":"a8ead142e0c87dcd5dc130eba1f8eeed506b08952d905c47621dc2f583b1bff9","impliedFormat":1},{"version":"a02f10ea5f73130efca046429254a4e3c06b5475baecc8f7b99a0014731be8b3","impliedFormat":1},{"version":"c2576a4083232b0e2d9bd06875dd43d371dee2e090325a9eac0133fd5650c1cb","impliedFormat":1},{"version":"4c9a0564bb317349de6a24eb4efea8bb79898fa72ad63a1809165f5bd42970dd","impliedFormat":1},{"version":"f40ac11d8859092d20f953aae14ba967282c3bb056431a37fced1866ec7a2681","impliedFormat":1},{"version":"cc11e9e79d4746cc59e0e17473a59d6f104692fd0eeea1bdb2e206eabed83b03","impliedFormat":1},{"version":"b444a410d34fb5e98aa5ee2b381362044f4884652e8bc8a11c8fe14bbd85518e","impliedFormat":1},{"version":"c35808c1f5e16d2c571aa65067e3cb95afeff843b259ecfa2fc107a9519b5392","impliedFormat":1},{"version":"14d5dc055143e941c8743c6a21fa459f961cbc3deedf1bfe47b11587ca4b3ef5","impliedFormat":1},{"version":"a3ad4e1fc542751005267d50a6298e6765928c0c3a8dce1572f2ba6ca518661c","impliedFormat":1},{"version":"f237e7c97a3a89f4591afd49ecb3bd8d14f51a1c4adc8fcae3430febedff5eb6","impliedFormat":1},{"version":"3ffdfbec93b7aed71082af62b8c3e0cc71261cc68d796665faa1e91604fbae8f","impliedFormat":1},{"version":"662201f943ed45b1ad600d03a90dffe20841e725203ced8b708c91fcd7f9379a","impliedFormat":1},{"version":"c9ef74c64ed051ea5b958621e7fb853fe3b56e8787c1587aefc6ea988b3c7e79","impliedFormat":1},{"version":"2462ccfac5f3375794b861abaa81da380f1bbd9401de59ffa43119a0b644253d","impliedFormat":1},{"version":"34baf65cfee92f110d6653322e2120c2d368ee64b3c7981dff08ed105c4f19b0","impliedFormat":1},{"version":"a56fe175741cc8841835eb72e61fa5a34adcbc249ede0e3494c229f0750f6b85","impliedFormat":1},{"version":"ab82804a14454734010dcdcd43f564ff7b0389bee4c5692eec76ff5b30d4cf66","impliedFormat":1},{"version":"f874ea4d0091b0a44362a5f74d26caab2e66dec306c2bf7e8965f5106e784c3b","impliedFormat":1},{"version":"c6cdcd12d577032b84eed1de4d2de2ae343463701a25961b202cff93989439fb","impliedFormat":1},{"version":"3dc633586d48fcd04a4f8acdbf7631b8e4a334632f252d5707e04b299069721e","impliedFormat":1},{"version":"3322858f01c0349ee7968a5ce93a1ca0c154c4692aa8f1721dc5192a9191a168","impliedFormat":1},{"version":"6dde0a77adad4173a49e6de4edd6ef70f5598cbebb5c80d76c111943854636ca","impliedFormat":1},{"version":"09acacae732e3cc67a6415026cfae979ebe900905500147a629837b790a366b3","impliedFormat":1},{"version":"f7b622759e094a3c2e19640e0cb233b21810d2762b3e894ef7f415334125eb22","impliedFormat":1},{"version":"99236ea5c4c583082975823fd19bcce6a44963c5c894e20384bc72e7eccf9b03","impliedFormat":1},{"version":"f6688a02946a3f7490aa9e26d76d1c97a388e42e77388cbab010b69982c86e9e","impliedFormat":1},{"version":"9f642953aba68babd23de41de85d4e97f0c39ef074cb8ab8aa7d55237f62aff6","impliedFormat":1},{"version":"159d95163a0ed369175ae7838fa21a9e9e703de5fdb0f978721293dd403d9f4a","impliedFormat":1},{"version":"bae8d023ef6b23df7da26f51cea44321f95817c190342a36882e93b80d07a960","impliedFormat":1},{"version":"26a770cec4bd2e7dbba95c6e536390fffe83c6268b78974a93727903b515c4e7","impliedFormat":1}],"root":[215],"options":{"allowSyntheticDefaultImports":true,"composite":true,"module":99,"skipLibCheck":true},"referencedMap":[[217,1],[216,2],[218,3],[219,3],[223,4],[226,5],[224,3],[114,6],[115,6],[116,7],[54,8],[117,9],[118,10],[119,11],[52,3],[120,12],[121,13],[122,14],[123,15],[124,16],[125,17],[126,17],[127,18],[128,19],[129,20],[130,21],[55,3],[53,3],[131,22],[132,23],[133,24],[173,25],[134,26],[135,27],[136,26],[137,28],[138,29],[139,30],[140,31],[141,31],[142,31],[143,32],[144,33],[145,34],[146,35],[147,36],[148,37],[149,37],[150,38],[151,3],[152,3],[153,39],[154,40],[155,39],[156,41],[157,42],[158,43],[159,44],[160,45],[161,46],[162,47],[163,48],[164,49],[165,50],[166,51],[167,52],[168,53],[169,54],[170,55],[56,26],[57,3],[58,56],[59,57],[60,3],[61,58],[62,3],[105,59],[106,60],[107,61],[108,61],[109,62],[110,3],[111,9],[112,63],[113,60],[171,64],[172,65],[221,3],[222,3],[220,66],[225,67],[81,68],[93,69],[79,70],[94,71],[103,72],[70,73],[71,74],[69,75],[102,76],[97,77],[101,78],[73,79],[90,80],[72,81],[100,82],[67,83],[68,77],[74,84],[75,3],[80,85],[78,84],[65,86],[104,87],[95,88],[84,89],[83,84],[85,90],[88,91],[82,92],[86,93],[98,76],[76,94],[77,95],[89,96],[66,71],[92,97],[91,84],[87,98],[96,3],[64,3],[99,99],[215,100],[208,101],[206,3],[253,3],[256,102],[255,3],[239,103],[238,3],[243,104],[240,101],[241,105],[242,101],[244,76],[227,106],[248,107],[247,108],[246,109],[174,3],[231,4],[236,110],[249,76],[232,3],[250,3],[251,111],[252,112],[261,113],[245,3],[265,114],[262,115],[233,3],[263,3],[237,116],[267,117],[268,118],[266,119],[264,120],[229,3],[230,3],[293,121],[294,122],[270,123],[273,124],[291,121],[292,121],[282,121],[281,125],[279,121],[274,121],[287,121],[285,121],[289,121],[269,121],[286,121],[290,121],[275,121],[276,121],[288,121],[271,121],[277,121],[278,121],[280,121],[284,121],[295,126],[283,121],[272,121],[308,127],[307,3],[302,126],[304,128],[303,126],[296,126],[297,126],[299,126],[301,126],[305,128],[306,128],[298,128],[300,128],[234,129],[228,71],[235,130],[309,3],[310,3],[320,131],[311,3],[312,3],[313,3],[314,3],[315,3],[316,3],[317,3],[318,3],[319,3],[321,3],[322,132],[214,133],[209,134],[212,135],[207,3],[63,3],[254,3],[181,3],[260,136],[258,137],[259,138],[210,3],[198,139],[196,140],[197,141],[185,142],[186,140],[193,143],[184,144],[189,145],[199,3],[190,146],[195,147],[201,148],[200,149],[183,150],[191,151],[192,152],[187,153],[194,139],[188,154],[257,155],[176,156],[175,157],[182,3],[1,3],[50,3],[51,3],[9,3],[13,3],[12,3],[3,3],[14,3],[15,3],[16,3],[17,3],[18,3],[19,3],[20,3],[21,3],[4,3],[22,3],[23,3],[5,3],[24,3],[28,3],[25,3],[26,3],[27,3],[29,3],[30,3],[31,3],[6,3],[32,3],[33,3],[34,3],[35,3],[7,3],[39,3],[36,3],[37,3],[38,3],[40,3],[8,3],[41,3],[46,3],[47,3],[42,3],[43,3],[44,3],[45,3],[2,3],[48,3],[49,3],[11,3],[10,3],[211,3],[205,158],[202,159],[180,160],[178,161],[177,3],[179,162],[203,3],[204,163],[213,164]],"latestChangedDtsFile":"./vite.config.d.ts","version":"5.9.3"} \ No newline at end of file diff --git a/frontend/tsconfig.tsbuildinfo b/frontend/tsconfig.tsbuildinfo new file mode 100644 index 0000000..6b48206 --- /dev/null +++ b/frontend/tsconfig.tsbuildinfo @@ -0,0 +1 @@ +{"root":["./src/main.ts","./src/vite-env.d.ts","./src/api/ai-3d.ts","./src/api/auth.ts","./src/api/classes.ts","./src/api/config.ts","./src/api/contests.ts","./src/api/departments.ts","./src/api/dict.ts","./src/api/grades.ts","./src/api/homework.ts","./src/api/judges-management.ts","./src/api/logs.ts","./src/api/menus.ts","./src/api/permissions.ts","./src/api/roles.ts","./src/api/schools.ts","./src/api/students.ts","./src/api/teachers.ts","./src/api/tenants.ts","./src/api/upload.ts","./src/api/users.ts","./src/composables/uselistrequest.ts","./src/composables/usesimplelistrequest.ts","./src/directives/permission.ts","./src/router/index.ts","./src/stores/auth.ts","./src/types/api.ts","./src/types/auth.ts","./src/types/router.ts","./src/utils/auth.ts","./src/utils/avatar.ts","./src/utils/menu.ts","./src/utils/request.ts","./src/app.vue","./src/components/modelviewer.vue","./src/components/richtexteditor.vue","./src/layouts/basiclayout.vue","./src/layouts/emptylayout.vue","./src/views/activities/comments.vue","./src/views/activities/guidance.vue","./src/views/activities/review.vue","./src/views/activities/reviewdetail.vue","./src/views/activities/components/reviewworkmodal.vue","./src/views/auth/login.vue","./src/views/contests/activities.vue","./src/views/contests/create.vue","./src/views/contests/detail.vue","./src/views/contests/guidance.vue","./src/views/contests/index.vue","./src/views/contests/registerindividual.vue","./src/views/contests/registerteam.vue","./src/views/contests/components/addjudgedrawer.vue","./src/views/contests/components/addparticipantdrawer.vue","./src/views/contests/components/addteacherdrawer.vue","./src/views/contests/components/submitworkdrawer.vue","./src/views/contests/components/viewworkdrawer.vue","./src/views/contests/components/workdetailmodal.vue","./src/views/contests/judges/index.vue","./src/views/contests/notices/index.vue","./src/views/contests/registrations/index.vue","./src/views/contests/registrations/records.vue","./src/views/contests/results/detail.vue","./src/views/contests/results/index.vue","./src/views/contests/reviews/index.vue","./src/views/contests/reviews/progress.vue","./src/views/contests/reviews/progressdetail.vue","./src/views/contests/reviews/tasks.vue","./src/views/contests/works/index.vue","./src/views/contests/works/worksdetail.vue","./src/views/error/403.vue","./src/views/error/404.vue","./src/views/homework/index.vue","./src/views/homework/reviewrules.vue","./src/views/homework/studentdetail.vue","./src/views/homework/studentlist.vue","./src/views/homework/submissions.vue","./src/views/model/modelviewer.vue","./src/views/school/classes/index.vue","./src/views/school/departments/index.vue","./src/views/school/grades/index.vue","./src/views/school/schools/index.vue","./src/views/school/students/index.vue","./src/views/school/teachers/index.vue","./src/views/system/config/index.vue","./src/views/system/dict/index.vue","./src/views/system/logs/index.vue","./src/views/system/menus/index.vue","./src/views/system/permissions/index.vue","./src/views/system/roles/index.vue","./src/views/system/tenants/index.vue","./src/views/system/users/index.vue","./src/views/workbench/index.vue","./src/views/workbench/ai-3d/generate.vue","./src/views/workbench/ai-3d/history.vue","./src/views/workbench/ai-3d/index.vue"],"errors":true,"version":"5.9.3"} \ No newline at end of file diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts index 1575052..3578627 100644 --- a/frontend/vite.config.ts +++ b/frontend/vite.config.ts @@ -1,23 +1,38 @@ -import { defineConfig } from "vite"; -import vue from "@vitejs/plugin-vue"; -import { resolve } from "path"; +import { defineConfig } from "vite" +import vue from "@vitejs/plugin-vue" +import { resolve } from "path" + +// 根据环境设置 base 路径 +const getBase = (mode: string) => { + switch (mode) { + case "test": + return "/web-test/" + case "production": + return "/web/" + default: + return "/" + } +} // https://vitejs.dev/config/ -export default defineConfig({ - plugins: [vue()], - resolve: { - alias: { - "@": resolve(__dirname, "src"), - }, - }, - server: { - port: 3000, - proxy: { - "/api": { - target: "http://localhost:3001", - changeOrigin: true, - // rewrite: (path) => path.replace(/^\/api/, ''), +export default defineConfig(({ mode }) => { + return { + base: getBase(mode), + plugins: [vue()], + resolve: { + alias: { + "@": resolve(__dirname, "src"), }, }, - }, -}); + server: { + port: 3000, + proxy: { + "/api": { + target: "http://localhost:3234", + changeOrigin: true, + // rewrite: (path) => path.replace(/^\/api/, ''), + }, + }, + }, + } +}) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fb79a5a..4d9232f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -31,9 +31,6 @@ importers: '@nestjs/platform-express': specifier: ^10.3.3 version: 10.4.20(@nestjs/common@10.4.20(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@10.4.20) - '@nestjs/serve-static': - specifier: ^4.0.0 - version: 4.0.2(@nestjs/common@10.4.20(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@10.4.20)(express@4.21.2) '@prisma/client': specifier: ^6.19.0 version: 6.19.0(prisma@6.19.0(typescript@5.9.3))(typescript@5.9.3) @@ -71,8 +68,8 @@ importers: specifier: ^7.8.1 version: 7.8.2 uuid: - specifier: ^13.0.0 - version: 13.0.0 + specifier: ^8.3.2 + version: 8.3.2 devDependencies: '@nestjs/cli': specifier: ^10.3.2 @@ -164,6 +161,12 @@ importers: '@vee-validate/zod': specifier: ^4.12.4 version: 4.15.1(vue@3.5.24(typescript@5.9.3))(zod@3.25.76) + '@wangeditor/editor': + specifier: ^5.1.23 + version: 5.1.23 + '@wangeditor/editor-for-vue': + specifier: ^5.1.12 + version: 5.1.12(@wangeditor/editor@5.1.23)(vue@3.5.24(typescript@5.9.3)) ant-design-vue: specifier: ^4.1.1 version: 4.2.6(vue@3.5.24(typescript@5.9.3)) @@ -226,8 +229,8 @@ importers: specifier: ^5.1.6 version: 5.4.21(@types/node@20.19.25)(sass@1.94.1)(terser@5.44.1) vue-tsc: - specifier: ^1.8.27 - version: 1.8.27(typescript@5.9.3) + specifier: ^3.2.2 + version: 3.2.2(typescript@5.9.3) packages: @@ -815,22 +818,6 @@ packages: peerDependencies: typescript: '>=4.8.2' - '@nestjs/serve-static@4.0.2': - resolution: {integrity: sha512-cT0vdWN5ar7jDI2NKbhf4LcwJzU4vS5sVpMkVrHuyLcltbrz6JdGi1TfIMMatP2pNiq5Ie/uUdPSFDVaZX/URQ==} - peerDependencies: - '@fastify/static': ^6.5.0 || ^7.0.0 - '@nestjs/common': ^9.0.0 || ^10.0.0 - '@nestjs/core': ^9.0.0 || ^10.0.0 - express: ^4.18.1 - fastify: ^4.7.0 - peerDependenciesMeta: - '@fastify/static': - optional: true - express: - optional: true - fastify: - optional: true - '@nestjs/testing@10.4.20': resolution: {integrity: sha512-nMkRDukDKskdPruM6EsgMq7yJua+CPZM6I6FrLP8yXw8BiVSPv9Nm0CtcGGwt3kgZF9hfxKjGqLjsvVBsv6Vfw==} peerDependencies: @@ -1113,6 +1100,9 @@ packages: '@tokenizer/token@0.3.0': resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} + '@transloadit/prettier-bytes@0.0.7': + resolution: {integrity: sha512-VeJbUb0wEKbcwaSlj5n+LscBl9IPgLPkHVGBkh00cztv6X4L/TJXK58LzFuBKX7/GAfiGhIwH67YTLTlzvIzBA==} + '@tsconfig/node10@1.0.12': resolution: {integrity: sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==} @@ -1158,6 +1148,9 @@ packages: '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + '@types/event-emitter@0.3.5': + resolution: {integrity: sha512-zx2/Gg0Eg7gwEiOIIh5w9TrhKKTeQh7CPCOPNc0el4pLSwzebA8SmnHwZs2dWlLONvyulykSwGSQxQHLhjGLvQ==} + '@types/express-serve-static-core@4.19.7': resolution: {integrity: sha512-FvPtiIf1LfhzsaIXhv/PHan/2FeQBbtBDtfX2QfvPxdUelMDEckK08SM6nqo1MIZY3RUlfA+HV8+hFUSio78qg==} @@ -1367,6 +1360,23 @@ packages: '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} + '@uppy/companion-client@2.2.2': + resolution: {integrity: sha512-5mTp2iq97/mYSisMaBtFRry6PTgZA6SIL7LePteOV5x0/DxKfrZW3DEiQERJmYpHzy7k8johpm2gHnEKto56Og==} + + '@uppy/core@2.3.4': + resolution: {integrity: sha512-iWAqppC8FD8mMVqewavCz+TNaet6HPXitmGXpGGREGrakZ4FeuWytVdrelydzTdXx6vVKkOmI2FLztGg73sENQ==} + + '@uppy/store-default@2.1.1': + resolution: {integrity: sha512-xnpTxvot2SeAwGwbvmJ899ASk5tYXhmZzD/aCFsXePh/v8rNvR2pKlcQUH7cF/y4baUGq3FHO/daKCok/mpKqQ==} + + '@uppy/utils@4.1.3': + resolution: {integrity: sha512-nTuMvwWYobnJcytDO3t+D6IkVq/Qs4Xv3vyoEZ+Iaf8gegZP+rEyoaFT2CK5XLRMienPyqRqNbIfRuFaOWSIFw==} + + '@uppy/xhr-upload@2.1.3': + resolution: {integrity: sha512-YWOQ6myBVPs+mhNjfdWsQyMRWUlrDLMoaG7nvf/G6Y3GKZf8AyjFDjvvJ49XWQ+DaZOftGkHmF1uh/DBeGivJQ==} + peerDependencies: + '@uppy/core': ^2.3.3 + '@vee-validate/zod@4.15.1': resolution: {integrity: sha512-329Z4TDBE5Vx0FdbA8S4eR9iGCFFUNGbxjpQ20ff5b5wGueScjocUIx9JHPa79LTG06RnlUR4XogQsjN4tecKA==} peerDependencies: @@ -1379,14 +1389,14 @@ packages: vite: ^5.0.0 || ^6.0.0 vue: ^3.2.25 - '@volar/language-core@1.11.1': - resolution: {integrity: sha512-dOcNn3i9GgZAcJt43wuaEykSluAuOkQgzni1cuxLxTV0nJKanQztp7FxyswdRILaKH+P2XZMPRp2S4MV/pElCw==} + '@volar/language-core@2.4.27': + resolution: {integrity: sha512-DjmjBWZ4tJKxfNC1F6HyYERNHPYS7L7OPFyCrestykNdUZMFYzI9WTyvwPcaNaHlrEUwESHYsfEw3isInncZxQ==} - '@volar/source-map@1.11.1': - resolution: {integrity: sha512-hJnOnwZ4+WT5iupLRnuzbULZ42L7BWWPMmruzwtLhJfpDVoZLjNBxHDi2sY2bgZXCKlpU5XcsMFoYrsQmPhfZg==} + '@volar/source-map@2.4.27': + resolution: {integrity: sha512-ynlcBReMgOZj2i6po+qVswtDUeeBRCTgDurjMGShbm8WYZgJ0PA4RmtebBJ0BCYol1qPv3GQF6jK7C9qoVc7lg==} - '@volar/typescript@1.11.1': - resolution: {integrity: sha512-iU+t2mas/4lYierSnoFOeRFQUhAEMgsFuQxoxvwn5EdQopw43j+J27a4lt9LMInx1gLJBC6qL14WYGlgymaSMQ==} + '@volar/typescript@2.4.27': + resolution: {integrity: sha512-eWaYCcl/uAPInSK2Lze6IqVWaBu/itVqR5InXcHXFyles4zO++Mglt3oxdgj75BDcv1Knr9Y93nowS8U3wqhxg==} '@vue/compiler-core@3.5.24': resolution: {integrity: sha512-eDl5H57AOpNakGNAkFDH+y7kTqrQpJkZFXhWZQGyx/5Wh7B1uQYvcWkvZi11BDhscPgj8N7XV3oRwiPnx1Vrig==} @@ -1423,13 +1433,8 @@ packages: typescript: optional: true - '@vue/language-core@1.8.27': - resolution: {integrity: sha512-L8Kc27VdQserNaCUNiSFdDl9LWT24ly8Hpwf1ECy3aFb9m6bDhBGQYOujDm21N7EW3moKIOKEanQwe1q5BK+mA==} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@vue/language-core@3.2.2': + resolution: {integrity: sha512-5DAuhxsxBN9kbriklh3Q5AMaJhyOCNiQJvCskN9/30XOpdLiqZU9Q+WvjArP17ubdGEyZtBzlIeG5nIjEbNOrQ==} '@vue/reactivity@3.5.24': resolution: {integrity: sha512-BM8kBhtlkkbnyl4q+HiF5R5BL0ycDPfihowulm02q3WYp2vxgPcJuZO866qa/0u3idbMntKEtVNuAUp5bw4teg==} @@ -1448,6 +1453,93 @@ packages: '@vue/shared@3.5.24': resolution: {integrity: sha512-9cwHL2EsJBdi8NY22pngYYWzkTDhld6fAD6jlaeloNGciNSJL6bLpbxVgXl96X00Jtc6YWQv96YA/0sxex/k1A==} + '@wangeditor/basic-modules@1.1.7': + resolution: {integrity: sha512-cY9CPkLJaqF05STqfpZKWG4LpxTMeGSIIF1fHvfm/mz+JXatCagjdkbxdikOuKYlxDdeqvOeBmsUBItufDLXZg==} + peerDependencies: + '@wangeditor/core': 1.x + dom7: ^3.0.0 + lodash.throttle: ^4.1.1 + nanoid: ^3.2.0 + slate: ^0.72.0 + snabbdom: ^3.1.0 + + '@wangeditor/code-highlight@1.0.3': + resolution: {integrity: sha512-iazHwO14XpCuIWJNTQTikqUhGKyqj+dUNWJ9288Oym9M2xMVHvnsOmDU2sgUDWVy+pOLojReMPgXCsvvNlOOhw==} + peerDependencies: + '@wangeditor/core': 1.x + dom7: ^3.0.0 + slate: ^0.72.0 + snabbdom: ^3.1.0 + + '@wangeditor/core@1.1.19': + resolution: {integrity: sha512-KevkB47+7GhVszyYF2pKGKtCSj/YzmClsD03C3zTt+9SR2XWT5T0e3yQqg8baZpcMvkjs1D8Dv4fk8ok/UaS2Q==} + peerDependencies: + '@uppy/core': ^2.1.1 + '@uppy/xhr-upload': ^2.0.3 + dom7: ^3.0.0 + is-hotkey: ^0.2.0 + lodash.camelcase: ^4.3.0 + lodash.clonedeep: ^4.5.0 + lodash.debounce: ^4.0.8 + lodash.foreach: ^4.5.0 + lodash.isequal: ^4.5.0 + lodash.throttle: ^4.1.1 + lodash.toarray: ^4.4.0 + nanoid: ^3.2.0 + slate: ^0.72.0 + snabbdom: ^3.1.0 + + '@wangeditor/editor-for-vue@5.1.12': + resolution: {integrity: sha512-0Ds3D8I+xnpNWezAeO7HmPRgTfUxHLMd9JKcIw+QzvSmhC5xUHbpCcLU+KLmeBKTR/zffnS5GQo6qi3GhTMJWQ==} + peerDependencies: + '@wangeditor/editor': '>=5.1.0' + vue: ^3.0.5 + + '@wangeditor/editor@5.1.23': + resolution: {integrity: sha512-0RxfeVTuK1tktUaPROnCoFfaHVJpRAIE2zdS0mpP+vq1axVQpLjM8+fCvKzqYIkH0Pg+C+44hJpe3VVroSkEuQ==} + + '@wangeditor/list-module@1.0.5': + resolution: {integrity: sha512-uDuYTP6DVhcYf7mF1pTlmNn5jOb4QtcVhYwSSAkyg09zqxI1qBqsfUnveeDeDqIuptSJhkh81cyxi+MF8sEPOQ==} + peerDependencies: + '@wangeditor/core': 1.x + dom7: ^3.0.0 + slate: ^0.72.0 + snabbdom: ^3.1.0 + + '@wangeditor/table-module@1.1.4': + resolution: {integrity: sha512-5saanU9xuEocxaemGdNi9t8MCDSucnykEC6jtuiT72kt+/Hhh4nERYx1J20OPsTCCdVr7hIyQenFD1iSRkIQ6w==} + peerDependencies: + '@wangeditor/core': 1.x + dom7: ^3.0.0 + lodash.isequal: ^4.5.0 + lodash.throttle: ^4.1.1 + nanoid: ^3.2.0 + slate: ^0.72.0 + snabbdom: ^3.1.0 + + '@wangeditor/upload-image-module@1.0.2': + resolution: {integrity: sha512-z81lk/v71OwPDYeQDxj6cVr81aDP90aFuywb8nPD6eQeECtOymrqRODjpO6VGvCVxVck8nUxBHtbxKtjgcwyiA==} + peerDependencies: + '@uppy/core': ^2.0.3 + '@uppy/xhr-upload': ^2.0.3 + '@wangeditor/basic-modules': 1.x + '@wangeditor/core': 1.x + dom7: ^3.0.0 + lodash.foreach: ^4.5.0 + slate: ^0.72.0 + snabbdom: ^3.1.0 + + '@wangeditor/video-module@1.1.4': + resolution: {integrity: sha512-ZdodDPqKQrgx3IwWu4ZiQmXI8EXZ3hm2/fM6E3t5dB8tCaIGWQZhmqd6P5knfkRAd3z2+YRSRbxOGfoRSp/rLg==} + peerDependencies: + '@uppy/core': ^2.1.4 + '@uppy/xhr-upload': ^2.0.7 + '@wangeditor/core': 1.x + dom7: ^3.0.0 + nanoid: ^3.2.0 + slate: ^0.72.0 + snabbdom: ^3.1.0 + '@webassemblyjs/ast@1.14.1': resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} @@ -1559,6 +1651,9 @@ packages: ajv@8.17.1: resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + alien-signals@3.1.2: + resolution: {integrity: sha512-d9dYqZTS90WLiU0I5c6DHj/HcKkF8ZyGN3G5x8wSbslulz70KOxaqCT0hQCo9KOyhVqzqGojvNdJXoTumZOtcw==} + ansi-colors@4.1.3: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} engines: {node: '>=6'} @@ -1904,9 +1999,6 @@ packages: compute-scroll-into-view@1.0.20: resolution: {integrity: sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg==} - computeds@0.0.1: - resolution: {integrity: sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==} - concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} @@ -1996,6 +2088,10 @@ packages: csstype@3.2.3: resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + d@1.0.2: + resolution: {integrity: sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==} + engines: {node: '>=0.12'} + dashdash@1.14.1: resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==} engines: {node: '>=0.10'} @@ -2003,9 +2099,6 @@ packages: dayjs@1.11.19: resolution: {integrity: sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==} - de-indent@1.0.2: - resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} - debounce-fn@4.0.0: resolution: {integrity: sha512-8pYCQiL9Xdcg0UPSD3d+0KMlOjp+KGU5EPwYddgzQ7DATsg4fuUDjQtsYLmWjnk2obnNHgV3vE2Y4jejSOJVBQ==} engines: {node: '>=10'} @@ -2108,6 +2201,9 @@ packages: dom-scroll-into-view@2.0.1: resolution: {integrity: sha512-bvVTQe1lfaUr1oFzZX80ce9KLDlZ3iU+XGNE/bz9HnGdklTieqsbmsLHe+rT2XWqopvL0PckkYqN7ksmm5pe3w==} + dom7@3.0.0: + resolution: {integrity: sha512-oNlcUdHsC4zb7Msx7JN3K0Nro1dzJ48knvBOnDPKJ2GV9wl1i5vydJZUSyOfrkKFDZEud/jBsTk92S/VGSAe/g==} + dot-prop@6.0.1: resolution: {integrity: sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==} engines: {node: '>=10'} @@ -2214,6 +2310,17 @@ packages: resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} engines: {node: '>= 0.4'} + es5-ext@0.10.64: + resolution: {integrity: sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==} + engines: {node: '>=0.10'} + + es6-iterator@2.0.3: + resolution: {integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==} + + es6-symbol@3.1.4: + resolution: {integrity: sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==} + engines: {node: '>=0.12'} + esbuild@0.21.5: resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} engines: {node: '>=12'} @@ -2282,6 +2389,10 @@ packages: deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. hasBin: true + esniff@2.0.1: + resolution: {integrity: sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==} + engines: {node: '>=0.10'} + espree@9.6.1: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -2318,6 +2429,9 @@ packages: resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} engines: {node: '>= 0.6'} + event-emitter@0.3.5: + resolution: {integrity: sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==} + events@3.3.0: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} @@ -2341,6 +2455,9 @@ packages: exsolve@1.0.8: resolution: {integrity: sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==} + ext@1.7.0: + resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==} + extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} @@ -2599,16 +2716,15 @@ packages: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} - he@1.2.0: - resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} - hasBin: true - hookable@5.5.3: resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + html-void-elements@2.0.1: + resolution: {integrity: sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==} + http-errors@2.0.0: resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} engines: {node: '>= 0.8'} @@ -2621,6 +2737,9 @@ packages: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} + i18next@20.6.1: + resolution: {integrity: sha512-yCMYTMEJ9ihCwEQQ3phLo7I/Pwycf8uAx+sRHwwk5U9Aui/IZYgQRyMqXafQOw5QQ7DM1Z+WyEXWIqSuJHhG2A==} + iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} @@ -2632,6 +2751,9 @@ packages: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} + immer@9.0.21: + resolution: {integrity: sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==} + immutable@5.1.4: resolution: {integrity: sha512-p6u1bG3YSnINT5RQmx/yRZBpenIl30kVxkTLDyHLIMk0gict704Q9n+thfDI7lTRm9vXdDYutVzXhzcThxTnXA==} @@ -2694,6 +2816,9 @@ packages: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} + is-hotkey@0.2.0: + resolution: {integrity: sha512-UknnZK4RakDmTgz4PI1wIph5yxSs/mvChWs9ifnlXsKuXgWmOkY/hAE0H/k2MIqH0RlRye0i1oC07MCRSD28Mw==} + is-interactive@1.0.0: resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} engines: {node: '>=8'} @@ -2714,6 +2839,10 @@ packages: resolution: {integrity: sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==} engines: {node: '>=0.10.0'} + is-plain-object@5.0.0: + resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} + engines: {node: '>=0.10.0'} + is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} @@ -2725,6 +2854,9 @@ packages: resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} engines: {node: '>=10'} + is-url@1.2.4: + resolution: {integrity: sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==} + is-what@5.5.0: resolution: {integrity: sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw==} engines: {node: '>=18'} @@ -3022,12 +3154,28 @@ packages: lodash-es@4.17.21: resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} + lodash.camelcase@4.3.0: + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + + lodash.clonedeep@4.5.0: + resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==} + + lodash.debounce@4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + + lodash.foreach@4.5.0: + resolution: {integrity: sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==} + lodash.includes@4.3.0: resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} lodash.isboolean@3.0.3: resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==} + lodash.isequal@4.5.0: + resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} + deprecated: This package is deprecated. Use require('node:util').isDeepStrictEqual instead. + lodash.isinteger@4.0.4: resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==} @@ -3049,6 +3197,12 @@ packages: lodash.once@4.1.1: resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} + lodash.throttle@4.1.1: + resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==} + + lodash.toarray@4.4.0: + resolution: {integrity: sha512-QyffEA3i5dma5q2490+SgCvDN0pXLmRGSyAANuVi0HQ01Pkfr9fuoKQW8wm1wGBnJITs/mS7wQvS6VshUEBFCw==} + lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} @@ -3121,6 +3275,9 @@ packages: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} + mime-match@1.0.2: + resolution: {integrity: sha512-VXp/ugGDVh3eCLOBCiHZMYWQaTNUHv2IJrut+yXA6+JbLPXHglHwfS/5A5L0ll+jkCY7fIzRJcH6OIunF+c6Cg==} + mime-types@2.1.35: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} @@ -3169,8 +3326,8 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - muggle-string@0.3.1: - resolution: {integrity: sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==} + muggle-string@0.4.1: + resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==} multer@2.0.2: resolution: {integrity: sha512-u7f2xaZ/UG8oLXHvtF/oWTRvT44p9ecwBBqTwgJVq0+4BW1g8OW01TyMEGWBHbyMOYVHXslaut7qEQ1meATXgw==} @@ -3186,6 +3343,9 @@ packages: mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + namespace-emitter@2.0.1: + resolution: {integrity: sha512-N/sMKHniSDJBjfrkbS/tpkPj4RAbvW3mr8UAzvlMHyun93XEm83IAvhWtJVHo+RHn/oO8Job5YN4b+wRjSVp5g==} + nanoid@3.3.11: resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -3204,6 +3364,9 @@ packages: neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + next-tick@1.1.0: + resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} + node-abort-controller@3.1.1: resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==} @@ -3383,9 +3546,6 @@ packages: path-to-regexp@0.1.12: resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} - path-to-regexp@0.2.5: - resolution: {integrity: sha512-l6qtdDPIkmAmzEO6egquYDfqQGPMRNGjYtrU13HAXb3YSRrt7HSb1sJY0pKp6o2bAa86tSB6iwaW2JbthPKr7Q==} - path-to-regexp@3.3.0: resolution: {integrity: sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==} @@ -3416,6 +3576,10 @@ packages: resolution: {integrity: sha512-xUXwsxNjwTQ8K3GnT4pCJm+xq3RUPQbmkYJTP5aFIfNIvbcc/4MUxgBaaRSZJ6yGJZiGSyYlM6MzwTsRk8SYCg==} engines: {node: '>=12'} + picomatch@4.0.3: + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} + engines: {node: '>=12'} + pify@2.3.0: resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} engines: {node: '>=0.10.0'} @@ -3495,6 +3659,9 @@ packages: resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} + preact@10.28.2: + resolution: {integrity: sha512-lbteaWGzGHdlIuiJ0l2Jq454m6kcpI1zNje6d8MlGAFlYvP2GO4ibnat7P74Esfz4sPTdM6UxtTwh/d3pwM9JA==} + prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -3522,6 +3689,10 @@ packages: typescript: optional: true + prismjs@1.30.0: + resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==} + engines: {node: '>=6'} + prompts@2.4.2: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} @@ -3758,6 +3929,18 @@ packages: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} + slate-history@0.66.0: + resolution: {integrity: sha512-6MWpxGQZiMvSINlCbMW43E2YBSVMCMCIwQfBzGssjWw4kb0qfvj0pIdblWNRQZD0hR6WHP+dHHgGSeVdMWzfng==} + peerDependencies: + slate: '>=0.65.3' + + slate@0.72.8: + resolution: {integrity: sha512-/nJwTswQgnRurpK+bGJFH1oM7naD5qDmHd89JyiKNT2oOKD8marW0QSBtuFnwEbL5aGCS8AmrhXQgNOsn4osAw==} + + snabbdom@3.6.3: + resolution: {integrity: sha512-W2lHLLw2qR2Vv0DcMmcxXqcfdBaIcoN+y/86SmHv8fn4DazEQSH6KN3TjZcWvwujW56OHiiirsbHWZb4vx/0fg==} + engines: {node: '>=12.17.0'} + source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} @@ -3792,6 +3975,9 @@ packages: engines: {node: '>=0.10.0'} hasBin: true + ssr-window@3.0.0: + resolution: {integrity: sha512-q+8UfWDg9Itrg0yWK7oe5p/XRCJpJF9OBtXfOPgSJl+u3Xd5KI328RUEvUqSMVM9CiQUEf1QdBzJMkYGErj9QA==} + stack-utils@2.0.6: resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} engines: {node: '>=10'} @@ -3936,6 +4122,9 @@ packages: through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + tiny-warning@1.0.3: + resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==} + tinyexec@1.0.2: resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==} engines: {node: '>=18'} @@ -4068,6 +4257,9 @@ packages: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} + type@2.7.3: + resolution: {integrity: sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==} + typedarray@0.0.6: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} @@ -4121,15 +4313,15 @@ packages: resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} engines: {node: '>= 0.4.0'} - uuid@13.0.0: - resolution: {integrity: sha512-XQegIaBTVUjSHliKqcnFqYypAd4S+WCYt5NIeRs6w/UAry7z8Y9j5ZwRRL4kzq9U3sD6v+85er9FvkEaBpji2w==} - hasBin: true - uuid@3.4.0: resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==} deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. hasBin: true + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} @@ -4185,6 +4377,9 @@ packages: terser: optional: true + vscode-uri@3.1.0: + resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==} + vue-demi@0.14.10: resolution: {integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==} engines: {node: '>=12'} @@ -4207,14 +4402,11 @@ packages: peerDependencies: vue: ^3.5.0 - vue-template-compiler@2.7.16: - resolution: {integrity: sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==} - - vue-tsc@1.8.27: - resolution: {integrity: sha512-WesKCAZCRAbmmhuGl3+VrdWItEvfoFIPXOvUJkjULi+x+6G/Dy69yO3TBRJDr9eUlmsNAwVmxsNZxvHKzbkKdg==} + vue-tsc@3.2.2: + resolution: {integrity: sha512-r9YSia/VgGwmbbfC06hDdAatH634XJ9nVl6Zrnz1iK4ucp8Wu78kawplXnIDa3MSu1XdQQePTHLXYwPDWn+nyQ==} hasBin: true peerDependencies: - typescript: '*' + typescript: '>=5.0.0' vue-types@3.0.2: resolution: {integrity: sha512-IwUC0Aq2zwaXqy74h4WCvFCUtoV0iSWr0snWnE9TnU18S66GAQyqQbRf2qfJtUuiFsBf6qp0MEwdonlwznlcrw==} @@ -4272,6 +4464,9 @@ packages: engines: {node: '>= 8'} hasBin: true + wildcard@1.1.2: + resolution: {integrity: sha512-DXukZJxpHA8LuotRwL0pP1+rS6CS7FF2qStDDE1C7DDg2rLud2PXRMuEDYIPhgEezwnlHNL4c+N6MfMTjCGTng==} + word-wrap@1.2.5: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} @@ -5023,14 +5218,6 @@ snapshots: transitivePeerDependencies: - chokidar - '@nestjs/serve-static@4.0.2(@nestjs/common@10.4.20(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@10.4.20)(express@4.21.2)': - dependencies: - '@nestjs/common': 10.4.20(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2) - '@nestjs/core': 10.4.20(@nestjs/common@10.4.20(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@10.4.20)(reflect-metadata@0.2.2)(rxjs@7.8.2) - path-to-regexp: 0.2.5 - optionalDependencies: - express: 4.21.2 - '@nestjs/testing@10.4.20(@nestjs/common@10.4.20(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@10.4.20)(@nestjs/platform-express@10.4.20)': dependencies: '@nestjs/common': 10.4.20(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.2.2)(rxjs@7.8.2) @@ -5253,6 +5440,8 @@ snapshots: '@tokenizer/token@0.3.0': {} + '@transloadit/prettier-bytes@0.0.7': {} + '@tsconfig/node10@1.0.12': {} '@tsconfig/node12@1.0.11': {} @@ -5311,6 +5500,8 @@ snapshots: '@types/estree@1.0.8': {} + '@types/event-emitter@0.3.5': {} + '@types/express-serve-static-core@4.19.7': dependencies: '@types/node': 20.19.25 @@ -5591,6 +5782,35 @@ snapshots: '@ungap/structured-clone@1.3.0': {} + '@uppy/companion-client@2.2.2': + dependencies: + '@uppy/utils': 4.1.3 + namespace-emitter: 2.0.1 + + '@uppy/core@2.3.4': + dependencies: + '@transloadit/prettier-bytes': 0.0.7 + '@uppy/store-default': 2.1.1 + '@uppy/utils': 4.1.3 + lodash.throttle: 4.1.1 + mime-match: 1.0.2 + namespace-emitter: 2.0.1 + nanoid: 3.3.11 + preact: 10.28.2 + + '@uppy/store-default@2.1.1': {} + + '@uppy/utils@4.1.3': + dependencies: + lodash.throttle: 4.1.1 + + '@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4)': + dependencies: + '@uppy/companion-client': 2.2.2 + '@uppy/core': 2.3.4 + '@uppy/utils': 4.1.3 + nanoid: 3.3.11 + '@vee-validate/zod@4.15.1(vue@3.5.24(typescript@5.9.3))(zod@3.25.76)': dependencies: type-fest: 4.41.0 @@ -5604,18 +5824,17 @@ snapshots: vite: 5.4.21(@types/node@20.19.25)(sass@1.94.1)(terser@5.44.1) vue: 3.5.24(typescript@5.9.3) - '@volar/language-core@1.11.1': + '@volar/language-core@2.4.27': dependencies: - '@volar/source-map': 1.11.1 + '@volar/source-map': 2.4.27 - '@volar/source-map@1.11.1': - dependencies: - muggle-string: 0.3.1 + '@volar/source-map@2.4.27': {} - '@volar/typescript@1.11.1': + '@volar/typescript@2.4.27': dependencies: - '@volar/language-core': 1.11.1 + '@volar/language-core': 2.4.27 path-browserify: 1.0.1 + vscode-uri: 3.1.0 '@vue/compiler-core@3.5.24': dependencies: @@ -5679,19 +5898,15 @@ snapshots: transitivePeerDependencies: - supports-color - '@vue/language-core@1.8.27(typescript@5.9.3)': + '@vue/language-core@3.2.2': dependencies: - '@volar/language-core': 1.11.1 - '@volar/source-map': 1.11.1 + '@volar/language-core': 2.4.27 '@vue/compiler-dom': 3.5.24 '@vue/shared': 3.5.24 - computeds: 0.0.1 - minimatch: 9.0.5 - muggle-string: 0.3.1 + alien-signals: 3.1.2 + muggle-string: 0.4.1 path-browserify: 1.0.1 - vue-template-compiler: 2.7.16 - optionalDependencies: - typescript: 5.9.3 + picomatch: 4.0.3 '@vue/reactivity@3.5.24': dependencies: @@ -5717,6 +5932,114 @@ snapshots: '@vue/shared@3.5.24': {} + '@wangeditor/basic-modules@1.1.7(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.3))(dom7@3.0.0)(lodash.throttle@4.1.1)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.3)': + dependencies: + '@wangeditor/core': 1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.3) + dom7: 3.0.0 + is-url: 1.2.4 + lodash.throttle: 4.1.1 + nanoid: 3.3.11 + slate: 0.72.8 + snabbdom: 3.6.3 + + '@wangeditor/code-highlight@1.0.3(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.3))(dom7@3.0.0)(slate@0.72.8)(snabbdom@3.6.3)': + dependencies: + '@wangeditor/core': 1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.3) + dom7: 3.0.0 + prismjs: 1.30.0 + slate: 0.72.8 + snabbdom: 3.6.3 + + '@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.3)': + dependencies: + '@types/event-emitter': 0.3.5 + '@uppy/core': 2.3.4 + '@uppy/xhr-upload': 2.1.3(@uppy/core@2.3.4) + dom7: 3.0.0 + event-emitter: 0.3.5 + html-void-elements: 2.0.1 + i18next: 20.6.1 + is-hotkey: 0.2.0 + lodash.camelcase: 4.3.0 + lodash.clonedeep: 4.5.0 + lodash.debounce: 4.0.8 + lodash.foreach: 4.5.0 + lodash.isequal: 4.5.0 + lodash.throttle: 4.1.1 + lodash.toarray: 4.4.0 + nanoid: 3.3.11 + scroll-into-view-if-needed: 2.2.31 + slate: 0.72.8 + slate-history: 0.66.0(slate@0.72.8) + snabbdom: 3.6.3 + + '@wangeditor/editor-for-vue@5.1.12(@wangeditor/editor@5.1.23)(vue@3.5.24(typescript@5.9.3))': + dependencies: + '@wangeditor/editor': 5.1.23 + vue: 3.5.24(typescript@5.9.3) + + '@wangeditor/editor@5.1.23': + dependencies: + '@uppy/core': 2.3.4 + '@uppy/xhr-upload': 2.1.3(@uppy/core@2.3.4) + '@wangeditor/basic-modules': 1.1.7(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.3))(dom7@3.0.0)(lodash.throttle@4.1.1)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.3) + '@wangeditor/code-highlight': 1.0.3(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.3))(dom7@3.0.0)(slate@0.72.8)(snabbdom@3.6.3) + '@wangeditor/core': 1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.3) + '@wangeditor/list-module': 1.0.5(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.3))(dom7@3.0.0)(slate@0.72.8)(snabbdom@3.6.3) + '@wangeditor/table-module': 1.1.4(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.3))(dom7@3.0.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.3) + '@wangeditor/upload-image-module': 1.0.2(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(@wangeditor/basic-modules@1.1.7(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.3))(dom7@3.0.0)(lodash.throttle@4.1.1)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.3))(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.3))(dom7@3.0.0)(lodash.foreach@4.5.0)(slate@0.72.8)(snabbdom@3.6.3) + '@wangeditor/video-module': 1.1.4(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.3))(dom7@3.0.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.3) + dom7: 3.0.0 + is-hotkey: 0.2.0 + lodash.camelcase: 4.3.0 + lodash.clonedeep: 4.5.0 + lodash.debounce: 4.0.8 + lodash.foreach: 4.5.0 + lodash.isequal: 4.5.0 + lodash.throttle: 4.1.1 + lodash.toarray: 4.4.0 + nanoid: 3.3.11 + slate: 0.72.8 + snabbdom: 3.6.3 + + '@wangeditor/list-module@1.0.5(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.3))(dom7@3.0.0)(slate@0.72.8)(snabbdom@3.6.3)': + dependencies: + '@wangeditor/core': 1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.3) + dom7: 3.0.0 + slate: 0.72.8 + snabbdom: 3.6.3 + + '@wangeditor/table-module@1.1.4(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.3))(dom7@3.0.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.3)': + dependencies: + '@wangeditor/core': 1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.3) + dom7: 3.0.0 + lodash.isequal: 4.5.0 + lodash.throttle: 4.1.1 + nanoid: 3.3.11 + slate: 0.72.8 + snabbdom: 3.6.3 + + '@wangeditor/upload-image-module@1.0.2(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(@wangeditor/basic-modules@1.1.7(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.3))(dom7@3.0.0)(lodash.throttle@4.1.1)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.3))(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.3))(dom7@3.0.0)(lodash.foreach@4.5.0)(slate@0.72.8)(snabbdom@3.6.3)': + dependencies: + '@uppy/core': 2.3.4 + '@uppy/xhr-upload': 2.1.3(@uppy/core@2.3.4) + '@wangeditor/basic-modules': 1.1.7(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.3))(dom7@3.0.0)(lodash.throttle@4.1.1)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.3) + '@wangeditor/core': 1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.3) + dom7: 3.0.0 + lodash.foreach: 4.5.0 + slate: 0.72.8 + snabbdom: 3.6.3 + + '@wangeditor/video-module@1.1.4(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(@wangeditor/core@1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.3))(dom7@3.0.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.3)': + dependencies: + '@uppy/core': 2.3.4 + '@uppy/xhr-upload': 2.1.3(@uppy/core@2.3.4) + '@wangeditor/core': 1.1.19(@uppy/core@2.3.4)(@uppy/xhr-upload@2.1.3(@uppy/core@2.3.4))(dom7@3.0.0)(is-hotkey@0.2.0)(lodash.camelcase@4.3.0)(lodash.clonedeep@4.5.0)(lodash.debounce@4.0.8)(lodash.foreach@4.5.0)(lodash.isequal@4.5.0)(lodash.throttle@4.1.1)(lodash.toarray@4.4.0)(nanoid@3.3.11)(slate@0.72.8)(snabbdom@3.6.3) + dom7: 3.0.0 + nanoid: 3.3.11 + slate: 0.72.8 + snabbdom: 3.6.3 + '@webassemblyjs/ast@1.14.1': dependencies: '@webassemblyjs/helper-numbers': 1.13.2 @@ -5863,6 +6186,8 @@ snapshots: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 + alien-signals@3.1.2: {} + ansi-colors@4.1.3: {} ansi-escapes@4.3.2: @@ -6252,8 +6577,6 @@ snapshots: compute-scroll-into-view@1.0.20: {} - computeds@0.0.1: {} - concat-map@0.0.1: {} concat-stream@2.0.0: @@ -6353,14 +6676,17 @@ snapshots: csstype@3.2.3: {} + d@1.0.2: + dependencies: + es5-ext: 0.10.64 + type: 2.7.3 + dashdash@1.14.1: dependencies: assert-plus: 1.0.0 dayjs@1.11.19: {} - de-indent@1.0.2: {} - debounce-fn@4.0.0: dependencies: mimic-fn: 3.1.0 @@ -6426,6 +6752,10 @@ snapshots: dom-scroll-into-view@2.0.1: {} + dom7@3.0.0: + dependencies: + ssr-window: 3.0.0 + dot-prop@6.0.1: dependencies: is-obj: 2.0.0 @@ -6517,6 +6847,24 @@ snapshots: has-tostringtag: 1.0.2 hasown: 2.0.2 + es5-ext@0.10.64: + dependencies: + es6-iterator: 2.0.3 + es6-symbol: 3.1.4 + esniff: 2.0.1 + next-tick: 1.1.0 + + es6-iterator@2.0.3: + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + es6-symbol: 3.1.4 + + es6-symbol@3.1.4: + dependencies: + d: 1.0.2 + ext: 1.7.0 + esbuild@0.21.5: optionalDependencies: '@esbuild/aix-ppc64': 0.21.5 @@ -6636,6 +6984,13 @@ snapshots: transitivePeerDependencies: - supports-color + esniff@2.0.1: + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + event-emitter: 0.3.5 + type: 2.7.3 + espree@9.6.1: dependencies: acorn: 8.15.0 @@ -6662,6 +7017,11 @@ snapshots: etag@1.8.1: {} + event-emitter@0.3.5: + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + events@3.3.0: {} execa@5.1.1: @@ -6724,6 +7084,10 @@ snapshots: exsolve@1.0.8: {} + ext@1.7.0: + dependencies: + type: 2.7.3 + extend@3.0.2: {} external-editor@3.1.0: @@ -7017,12 +7381,12 @@ snapshots: dependencies: function-bind: 1.1.2 - he@1.2.0: {} - hookable@5.5.3: {} html-escaper@2.0.2: {} + html-void-elements@2.0.1: {} + http-errors@2.0.0: dependencies: depd: 2.0.0 @@ -7039,6 +7403,10 @@ snapshots: human-signals@2.1.0: {} + i18next@20.6.1: + dependencies: + '@babel/runtime': 7.28.4 + iconv-lite@0.4.24: dependencies: safer-buffer: 2.1.2 @@ -7047,6 +7415,8 @@ snapshots: ignore@5.3.2: {} + immer@9.0.21: {} + immutable@5.1.4: {} import-fresh@3.3.1: @@ -7126,6 +7496,8 @@ snapshots: dependencies: is-extglob: 2.1.1 + is-hotkey@0.2.0: {} + is-interactive@1.0.0: {} is-number@7.0.0: {} @@ -7136,12 +7508,16 @@ snapshots: is-plain-object@3.0.1: {} + is-plain-object@5.0.0: {} + is-stream@2.0.1: {} is-typedarray@1.0.0: {} is-unicode-supported@0.1.0: {} + is-url@1.2.4: {} + is-what@5.5.0: {} isexe@2.0.0: {} @@ -7626,10 +8002,20 @@ snapshots: lodash-es@4.17.21: {} + lodash.camelcase@4.3.0: {} + + lodash.clonedeep@4.5.0: {} + + lodash.debounce@4.0.8: {} + + lodash.foreach@4.5.0: {} + lodash.includes@4.3.0: {} lodash.isboolean@3.0.3: {} + lodash.isequal@4.5.0: {} + lodash.isinteger@4.0.4: {} lodash.isnumber@3.0.3: {} @@ -7644,6 +8030,10 @@ snapshots: lodash.once@4.1.1: {} + lodash.throttle@4.1.1: {} + + lodash.toarray@4.4.0: {} + lodash@4.17.21: {} log-symbols@4.1.0: @@ -7706,6 +8096,10 @@ snapshots: mime-db@1.52.0: {} + mime-match@1.0.2: + dependencies: + wildcard: 1.1.2 + mime-types@2.1.35: dependencies: mime-db: 1.52.0 @@ -7742,7 +8136,7 @@ snapshots: ms@2.1.3: {} - muggle-string@0.3.1: {} + muggle-string@0.4.1: {} multer@2.0.2: dependencies: @@ -7764,6 +8158,8 @@ snapshots: object-assign: 4.1.1 thenify-all: 1.6.0 + namespace-emitter@2.0.1: {} + nanoid@3.3.11: {} nanopop@2.4.2: {} @@ -7774,6 +8170,8 @@ snapshots: neo-async@2.6.2: {} + next-tick@1.1.0: {} + node-abort-controller@3.1.1: {} node-addon-api@7.1.1: @@ -7935,8 +8333,6 @@ snapshots: path-to-regexp@0.1.12: {} - path-to-regexp@0.2.5: {} - path-to-regexp@3.3.0: {} path-type@4.0.0: {} @@ -7955,6 +8351,8 @@ snapshots: picomatch@4.0.1: {} + picomatch@4.0.3: {} + pify@2.3.0: {} pinia@2.3.1(typescript@5.9.3)(vue@3.5.24(typescript@5.9.3)): @@ -8022,6 +8420,8 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 + preact@10.28.2: {} + prelude-ls@1.2.1: {} prettier-linter-helpers@1.0.0: @@ -8045,6 +8445,8 @@ snapshots: transitivePeerDependencies: - magicast + prismjs@1.30.0: {} + prompts@2.4.2: dependencies: kleur: 3.0.3 @@ -8334,6 +8736,19 @@ snapshots: slash@3.0.0: {} + slate-history@0.66.0(slate@0.72.8): + dependencies: + is-plain-object: 5.0.0 + slate: 0.72.8 + + slate@0.72.8: + dependencies: + immer: 9.0.21 + is-plain-object: 5.0.0 + tiny-warning: 1.0.3 + + snabbdom@3.6.3: {} + source-map-js@1.2.1: {} source-map-support@0.5.13: @@ -8368,6 +8783,8 @@ snapshots: safer-buffer: 2.1.2 tweetnacl: 0.14.5 + ssr-window@3.0.0: {} + stack-utils@2.0.6: dependencies: escape-string-regexp: 2.0.0 @@ -8519,6 +8936,8 @@ snapshots: through@2.3.8: {} + tiny-warning@1.0.3: {} + tinyexec@1.0.2: {} tmp@0.0.33: @@ -8640,6 +9059,8 @@ snapshots: media-typer: 0.3.0 mime-types: 2.1.35 + type@2.7.3: {} + typedarray@0.0.6: {} typescript@5.7.2: {} @@ -8675,10 +9096,10 @@ snapshots: utils-merge@1.0.1: {} - uuid@13.0.0: {} - uuid@3.4.0: {} + uuid@8.3.2: {} + v8-compile-cache-lib@3.0.1: {} v8-to-istanbul@9.3.0: @@ -8714,6 +9135,8 @@ snapshots: sass: 1.94.1 terser: 5.44.1 + vscode-uri@3.1.0: {} + vue-demi@0.14.10(vue@3.5.24(typescript@5.9.3)): dependencies: vue: 3.5.24(typescript@5.9.3) @@ -8736,16 +9159,10 @@ snapshots: '@vue/devtools-api': 6.6.4 vue: 3.5.24(typescript@5.9.3) - vue-template-compiler@2.7.16: + vue-tsc@3.2.2(typescript@5.9.3): dependencies: - de-indent: 1.0.2 - he: 1.2.0 - - vue-tsc@1.8.27(typescript@5.9.3): - dependencies: - '@volar/typescript': 1.11.1 - '@vue/language-core': 1.8.27(typescript@5.9.3) - semver: 7.7.3 + '@volar/typescript': 2.4.27 + '@vue/language-core': 3.2.2 typescript: 5.9.3 vue-types@3.0.2(vue@3.5.24(typescript@5.9.3)): @@ -8825,6 +9242,8 @@ snapshots: dependencies: isexe: 2.0.0 + wildcard@1.1.2: {} + word-wrap@1.2.5: {} wordwrap@1.0.0: {}